一.MAX78000应用方向
MAX78000FTHR开发板的主芯片为MAX78000,内核为异构双核,分别为带FPU的100MHz 的Arm Cortex-M4,和60MHz的RISC-V协处理器。另外,MAX78000包含一个CNN神经网络加速器,按规格书中提到CNN加速器中有442KB空间放置权重参数,即能放442k*8bit的参数。从这3个主要核心看,MAX78000的性能并不高,但是恰恰是它有恰当的功能,较高的性价比,和低功耗。让它可以应用在对成本比较敏感的智能设备中,如:智能家具中的语音遥控,工业语音控制器,手势识别控制器的终端应用。
以下,我将从音频,摄像、和cnn加速器的功能来测试一下MAX78000FTHR开发板。
二.摄像头测试
摄像头型号为OV7692,电路图如下。虽然数据线只有8条,但这个摄像头实际格式为RGB565。并且它是通过I2C控制的。
测试例程可以使用CameraIF。这个例程同样在SDK中。例程具体的操作为将摄像头获得的图片数据通过lcd显示,或者通过串口传输到电脑上,电脑上运行一个pygui的脚本来显示图片。因为我并没有lcd显示屏,我就直接使用电脑来查看图片效果。
在例程中的main.c中需要注释掉ENABLE_TFT。
// Configuration options
// ------------------------
// #define ENABLE_TFT // Comment out to disable TFT and send image to serial port instead.
另外因为是通过串口将图片数据传输到电脑,且例程默认的波特率为115200。这个传输速度比较慢,可以将速度提高到921600。
为了运行一个pygui的脚本(\CameraIF\pc_utility\grab_image.py),需要安装python插件。需要注意的是例程使用的是python3.7。我是使用的是python3.12,例程中推荐的插件版本并不适用。不过直接运行pip install opencv-python Pillow pyserial numpy,让pip自动安装最新版本即可。
将例程编译,下载。将摄像头对着想拍摄的物体。并在终端运行:
PS D:\MaximSDK\Examples\MAX78000\CameraIF\pc_utility> python grab_image.py COM59 921600
这就能看到拍摄的图像。虽然刷新率比较低,但图片还是挺清晰的。
三.关键词识别测试
MAX78000FTHR开发板出厂demo就是一个关键词识别例子。但是SDK例程中并没有对应的例程源代码。不过可以找到类似的例子,我使用的是pathtoxx\MaximSDK\Examples\MAX78000\CNN\kws20_demo这个例程。它通过连接的硅麦,接收语音,并将语音数据通过cnn神经网络来识别是否为关键词。这个神经网络的模型能识别的关键词有:
['**up', 'down', 'left', 'right', 'stop', 'go', 'yes', 'no', 'on', 'off', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'zero**']
硅麦的电路连接如下,其实就是I2S接口。
烧录固件,打开串口调试助手,对着硅麦说"one" 到"nine"。串口将打印识别的结果。如下:
ANALOG DEVICES
Keyword Spotting Demo
Ver. 3.2.3 (5/05/23)
***** Init *****
pChunkBuff: 128
pAI85Buffer: 16384
*** I2S & Mic Init ***
*** READY ***
Word starts from index 14976 to 3072, padded with 8064 zeros, avg:508 > 350
690688: Starts CNN: 3
690688: Completes CNN: 3
CNN Time: 1849 us
Min: -35, Max: 52
-----------------------------------------
Detected word: ONE (100.0%)
-----------------------------------------
Word starts from index 5376 to 11008, padded with 6912 zeros, avg:376 > 350
718080: Starts CNN: 4
718080: Completes CNN: 4
CNN Time: 1849 us
Min: -35, Max: 29
-----------------------------------------
Detected word: TWO (99.9%)
-----------------------------------------
Word starts from index 5632 to 10880, padded with 7296 zeros, avg:378 > 350
878976: Starts CNN: 9
878976: Completes CNN: 9
CNN Time: 1849 us
Min: -38, Max: 39
-----------------------------------------
Detected word: THREE (99.0%)
-----------------------------------------
Word starts from index 11392 to 768, padded with 6784 zeros, avg:399 > 350
941568: Starts CNN: 11
941568: Completes CNN: 11
CNN Time: 1849 us
Min: -28, Max: 40
-----------------------------------------
Detected word: FOUR (100.0%)
-----------------------------------------
Word starts from index 640 to 6144, padded with 7040 zeros, avg:399 > 350
980480: Starts CNN: 12
980480: Completes CNN: 12
CNN Time: 1849 us
Min: -21, Max: 18
-----------------------------------------
Detected word: FIVE (100.0%)
-----------------------------------------
Word starts from index 5760 to 9984, padded with 8320 zeros, avg:462 > 350
1126528: Starts CNN: 18
1126528: Completes CNN: 18
CNN Time: 1849 us
Min: -33, Max: 39
-----------------------------------------
Detected word: SIX (99.9%)
-----------------------------------------
Word starts from index 8960 to 13952, padded with 7552 zeros, avg:497 > 350
1100160: Starts CNN: 17
1100160: Completes CNN: 17
CNN Time: 1849 us
Min: -40, Max: 42
-----------------------------------------
Detected word: SEVEN (93.8%)
-----------------------------------------
Word starts from index 9984 to 1536, padded with 4608 zeros, avg:369 > 350
1331584: Starts CNN: 24
1331584: Completes CNN: 24
CNN Time: 1849 us
Min: -38, Max: 34
-----------------------------------------
Detected word: EIGHT (99.2%)
-----------------------------------------
Word starts from index 7936 to 15872, padded with 4608 zeros, avg:474 > 350
1363840: Starts CNN: 25
1363840: Completes CNN: 25
CNN Time: 1849 us
Min: -35, Max: 30
-----------------------------------------
Detected word: NINE (100.0%)
-----------------------------------------
测试发现,kws20_demo这个例程识别准确率还是挺高的。程序中会判断接收到的语音音量,如果较小时,会视为环境噪声,不做处理。所以,说话时需要对着硅麦,才能有较好识别效果。
四.音频环路测试
MAX78000FTHR开发板上的音频编解码器为MAX9867EWV。模拟输入为2通道的3.5mm音频接口,模拟输出也为2通道的3.5mm音频接口。MAX78000通过I2C控制,并通过I2S传输音频数据。
可以用pathto\MaximSDK\Examples\MAX78000\I2S_DMA_Target来测试。但是我在测试发现,程序在初始MAX9867时,会卡在I2C传输函数MXC_I2C_RevA_MasterTransaction中。花了1个星期,没有解决。应该是I2C的配置没有配置正确。还要重新看规格书才能找到问题所在。
以上便是我对MAX78000FTHR的功能测试。
实际测试中,无论是摄像头图像采集,还是关键词识别,官方例程都表现出了较好的完整度和较高的识别准确率,尤其语音识别响应速度快、效果稳定。MSDK 提供了较完善的开发环境和示例,很适合学习嵌入式AI开发。
本来我想用它官方的神经网络训练工具(ai8x-training tool)来重新获得新的cnn神经网络文件,但是碍于本人水平和纠结于MAX9867配置问题,一直没有来得及实践。





