*阅读说明:以下仅简要提取总结,详细开源项目过程描述及相关源码、资料等请戳原链接查看。
基于N32G45x系列芯片完成如下功能: 1. 插入储存固件的SD卡 2. 自动/手动完成固件升级,通过LED灯或者打印反馈升级结果 发帖要求:提交内容需要包含详细的文字或者图片描述,如原理讲解、测试环境、操作流程、代码配置、代码演示、应用场景等,必要时需要视频演示成果。
N32G45x 的内部闪存(FLASH)地址起始于 0x08000000,一般情况下,程序文件就从此地址开始写入。此外 N32G45x 是基于 Cortex-M4F 内核的微控制器,其内部通过一张“中断向量表”来响应中断,程序启动后,将首先从“中断向量表”取出复位中断向量执行复位中断程序完成启动,而这张“中断向量表”的起始地址是 0x08000004,当中断来临,N32G45x 的内部硬件机制亦会自动将 PC 指针定位到中断向量表处,并根据中断源取出对应的中断向量执行中断服务程序。
硬件部分说明:使用N32G457XVL-STB V1.1开发板,因为板子上并没有集成SD卡槽,所有需要扩展一个SD卡槽,SD卡支持两种驱动模式,一种是SPI驱动,另一种是SDIO驱动,因为我手上只有SPI接口的SD卡模块,所以本例程使用的是SPI驱动SD卡进行的演示。 软件部分说明:首先要准备一个编译无错误并运行正常的工程文件(建议使用厂家例程库里的工程,我这里使用的是uart的printf工程)
很高兴能参加本次国民N32G45x的SD卡IAP升级开发活动,通过本次活动,我学到了SDIO的SD卡读写,腾讯TinyOS的fatfs移植等内容。虽然没能完成本次活动作业,但是在折腾的过程中,也学到了不少东西。以下是本次活动的个人折腾笔记和部分心得。 由于我个人非常喜欢用VSCode开发单片机程序,所以只习惯在VSCode下开发。如果单片机不支持VSCode的,那也得想办法弄。经过在网上搜索,学习OpenOCD的芯片移植,把N32G45x的构建系统移植到GN + Ninja上,成功实现了VSCode下的编译和debug调试。
由于众所周知的原因,笔者也在做MCU产品的国产化替代方案。N32系列是我的首选方案。我们本次介绍如何基于N32G455VE使用SD卡做为数据媒介完成IAP升级的项目分享。 本次我采取的IAP更新策略是“检查SD卡根目录是否有update.bin文件”?如果有,则进入IAP在线更新程序。否则,直接跳转到已烧入到Flash中的APP。
本次项目完成走了不少坑,也更理解了代码实现的原理,整个过程算是一波三折,不过还是顺利的完成了整个功能的测试,至于遇到的坑在最后经验总结中聊聊。 哪么开始之前,我就先把自己理解的原理讲解下: 要想实现固件的自升级,就是把新的固件按一个固定的模式写入到Flash中,程序运行会有一个入口,这就是入口地址,而ARM的好像都是从0x8000000这个地址开始,至少我目前用到的都是这样,当我们使用某种方式(编程器或串口烧录)成功把固件从这个起始地址写入到Flash中,哪么就正常来说就可以正常运行。但想要程序运行时把新固件从这个地址会写入到Flash会遇到一个问题,因程序本身也是从0x8000000这个地址运行,运行时又要读取Flash中数据,而向这个地址写入数据的话,就会把本身的运行环境破坏,也就是运行时读取到的数据被改变了,导致程序出错卡死。所以如果是自身更新自身的话,肯定是有问题的,最好的办法就是另一个程序来更新,由更新程序来向另一个地址来写入,这样本身数据不会被破坏,也就能正常更新了。
本次目标是实现基于国名的N32G45X单片机实现SD卡的IAP升级。我将实现目标分为以下步骤。首先就要实现的功能: MCU的flash擦除,读和写功能。 SD卡的驱动移植,包含SD卡的读写数据。 文件系统的移植,这里移植最常用的FATFS文件系统。这样对SD内文件操作起来更方便。 主要是设计触发进入升级更新的方法,以及更新完之后的跳转到应用APP。
我是第一次使用SD卡进行IAP升级,在接到这个任务后,我查阅了很多资料,同时也购买了TF卡转接卡。回来时刚好接到连续的出差,我是带着macOS电脑出门的,临时安装的虚拟机进行开发。所以遇到了各种想不到的困难。
|