参考网址:
微信(中文):【嵌入式AI开发&Maxim篇一】美信Maxim78000Evaluation Kit AI部署流程初探
GitHub:MaximAI_Documentation/MAX78000_Feather at master · MaximIntegratedAI/MaximAI_Documentation
下载地址
安装完成
建立一个新项目
打开Eclipse MaximSDK,并新建一个Pro
输入你的项目名称
“选择示例类型”可以是您感兴趣的任何固件示例。请注意,此处未列出特定于 CNN 的示例。CNN 示例必须通过下面介绍的不同机制导入。
如果您使用的是 PICO 调试器,请将适配器类型设置为MAX32625_PICO。如果您使用的是 Olimax 调试器,请将适配器类型设置为 CMSIS-DAP。
咱们好像提供的是CMSIS-DAP,可以打开自己的设备管理器看一下。
单击“完成”,Eclipse 将打开您的项目,您可以编辑、编译和调试。
然后点击 完成,你就可以看到你打开的历程 hello world
配置一个CNN项目
File->Import
Existing Projects into Workspace
然后NEXT,需要在 SDK 树中提供 CNN 示例的路径,如下图所示。路径将取决于 SDK 的安装位置。
Maxim SDK附带了许多卷积神经网络演示,可以导入到Eclipse中。这些固件示例可在SDK中的示例\MAX78000\CNN中找到。选择“文件”->“导入”,然后选择“常规>将现有项目放入工作区”。使用后续对话框,导航至示例\MAX78000\CNN并导入您感兴趣的所有固件项目。您可以在“实施例\MAX78000”目录中找到MAX78000的外设应用示例。
所有CNN示例都可以在MAX78000EVKIT上运行,但MAX78000FTHR目前并不支持所有CNN示例。以下是MAX78000 FTHR支持的示例列表:
- cifar-10
- cifar-100
- mnist
- mnist-riscv
- mnist-streaming
- kws20_v3
- kws20_demo
- faceid
- faceid_demo
- faceid_evkit
- cats-dogs_demo
- rps
- snake_game_demo
我这里选择了kws20_demo,别问为什么,问就是我准备训练语音模型,看大神们都是这个名字的框架。
看到没,这就是你打开的一个CNN项目,等你训练好模型之后,应用逻辑开发就在这里进行。
而且生怕咱们不会玩,人家直接给了一个readme,教你怎么配置。
请注意,默认情况下,所有示例都以 EVKIT 为目标。要将目标更改为 FTHR,您必须通过 BOARD=FTHR_RevA。这可以在每个项目的基础上在 Eclipse 中完成,如下所示:
但是只到这一步是不行的,以固件为中心的方法允许您快速编译、修改和调试现有的 CNN 示例,但如果要修改 ML 模型或重新训练 ML 网络,则需要使用下一节中介绍的以 ML 为中心的方法。
而完成这个项目,咱们必须要训练自己的模型。
在MINGW 命令行 中编译SDK例子
SDK包括多个示例,用于演示MAX78000的特性,并展示API中各种功能的使用。每个示例都包括一个已配置为与评估板配合使用的生成文件。要构建一个示例,只需切换到包含该示例的目录并运行“make”。构建时,每个示例都会生成一个 max78000.elf(对于同时涉及 RISC-V 和 ARM 内核的项目,则为 max78000 组合.elf)文件,该文件可在该示例的“构建”目录中找到。
在视窗上,MSYS 外壳程序(包含在开发工具包中)可用于生成示例。启动“msys.bat”以启动外壳程序。可以从 Windows 的“开始”菜单或下面显示的默认安装目录中访问外壳程序。
按照步骤打开视窗,并尝试构建一个hello world的示例。
lenovo@LAPTOP-73SAFNNK MINGW64 ~
$ cd /E/MAX78000/MAXSDK/Examples/MAX78000/Hello_World/
lenovo@LAPTOP-73SAFNNK MINGW64 /E/MAX78000/MAXSDK/Examples/MAX78000/Hello_World
然后make,就可以构建完成,好家伙,我的一下子编译了这么长,和例子给的可不一样啊!
不过好在,最后想要的.elf得到了。
在OpenOCD 上烧录、运行、Debug编译好的固件
应用程序是使用 OpenOCD 和地理数据库加载、调试和运行的。本节介绍如何专门在 Windows 上使用 MSYS 执行此操作,但可以在 Linux 下使用非常相似的方法。
MAX78000FTHR具有集成的闪联调试器。咱们这次还玩 hello world:
- 1.使用 USB 电缆将 FTHR 连接到主机 PC。窗口将枚举一个 daplink 设备和拇指驱动器设备。
2.切换到OpenOCD目录,并使用以下命令启动OpenOCD:
openocd -f interface/cmsis-dap.cfg -f target/max78000.cfg -s/c/MaximSDK/Tools/OpenOCD/scripts
3.连接成功之后,你就会看到下面的信息
然后我就失败了:经查询是OpenOCD的位置搞错了
经过调整:MAGOD!还是报错
openocd -f interface/cmsis-dap.cfg -f target/max78000.cfg -s e/MAX78000/MAXSDK/Tools/OpenOCD/scripts
这时我突然想起来,是不是固件我没有更新,第一步我把它跳过去了,本想保留它自带的DEMO玩几天呢,失算失算
MAX78000FTHR集成了MAX32625PICO(“PICO”)调试适配器。在开发之前,应将此调试器的固件更新到最新版本。这些更新包含确保调试器正常运行所需的 bug 修复和改进。
调试器的固件更新
1.下载max32625_max78000fthr_if_crc_v1.0.2.bin 链接在这里:this
2.把你手里的 开发板 先和 那个配套的USB 连上,注意:先不要和电脑连接!!!
3.按这个按钮,不要松手
4.保持按着这个按钮,把USB的另一端和你的电脑连起来,然后一直按着,直到红色的LED闪烁,然后一直亮着
5.这个时候,就可以松手了,然后看你的电脑,就会发现一个MAINTENANC驱动出现
6.把你刚下载的驱动直接拖进去
7.然后就搞定了,又重新变成了DAPLINK
8.打开这个文件,如果咱们两个的号一样,那就是更新好了,可以进行PICO debugger了
然后我试了试,发现板子里面的DEMO一样可以玩,这个步骤只是更新了一下调试的驱动,不影响。
继续上面的步骤:
- 2.切换到OpenOCD目录,并使用以下命令启动OpenOCD:
还是不行,难搞,MINGW32下没有OPENCD这个命令openocd -f interface/cmsis-dap.cfg -f target/max78000.cfg -s e/MAX78000/MAXSDK/Tools/OpenOCD/scripts
MINGW64下还是老问题,绝了
服了,还是路径问题。。。。。。e前面要加 / 因为不是c目录openocd -f interface/cmsis-dap.cfg -f target/max78000.cfg -s /e/MAX78000/MAXSDK/Tools/OpenOCD/scripts
3.打开一个新的窗口
4.使用下面两个命令进行GDB调试
5.连接GDB与OpenOCD 复位MAX78000arm-none-eabi-gdb max78000.elf
arm-none-eabi-gdb max78000-combined.elf
6.加载并验证程序target remote localhost:3333
monitor reset halt
7.复位并运行程序load
compare-sections
| Command | Short Command | Description | | —- | —- | —- | | monitor halt | | Halt the microcontroller. | | monitor reset halt | | Reset the microcontroller and immediately halt. | | monitor max32xxx mass_erase 0 | | Mass erase the flash. | | continue | c | Continue execution. | | breakmonitor reset halt
c
| b | Set a breakpoint. Argument can be function_name, file:line_number, or *address. | | print | p | Print the value of a variable. Variable must be in current scope. | | backtrace | bt | Print contents of the stack frame. | | step | s | Execute the next instruction. | | next | n | Execute the next line of code. | | finish | f | Continue to the end of the current function. | | info reg | | Print the values of the ARM registers. | | help | | Print descriptions for available commands | | help | | Print description for given command. |