本帖最后由 qiangtech 于 2023-4-10 23:31 编辑
#申请原创#
经过大约一个星期的调试,终于完成了在N32G45XVL-STB板上进**IAP升级的操作。中间也遇到一些困难,但总体还算顺利。下面说一下我的方法,给大家做个参考。 首先,板载的N32G457芯片是有一个SDIO接口的,而且官方在资料包里也SDIO的驱动示例,这样的话底层驱动可以直接使用官方的,大大节省了移值的时间。
可以看到,官方SDIO驱动非常全面,提供了单块读写,多块读写,GET_STATE,GET_INFO等多个函数,在底层驱动上可以不做改动,直接使用。
在SD_INIT函数里面,有初始化SDIO接口GPIO的函数GPIO_CONFIGURATION.由它定义SDIO的各个功能引脚。
跟着它,最终跟我的SD卡模块连接如下,顺便说一下,有看到网上SPI接口的SD卡模块,只有6个引脚的,就只能用SPI驱动的底层函数了,不能用这个SDIO的驱动。
连接关系:
板卡GPIO口 SD卡口
PC10 D02
PC11 D03
PD2 CMD
PC12 CLK
PC8 D00
PC9 D01
SD模块的电源和地接到开发板的3.3V和GND上即可。完成连接后,硬件上就没有再改动的了。
连接好之后,就可以用这个例程测试一下SD卡模块和SD卡了。
例程读取了卡的信息并且做了读写比较操作。
我在这里遇到了第一个麻烦,我有一张128M的小卡,用它测试时,显示它的BLOCKSIZE是1024的。我就想把BLOCKSIZE改为1024来读写,结果就是卡死在DMA传输那里。
把DATBLKSIZE改成10<<4也是不行,能写不能读。
花了好多时间,没有找到问题根源。好在BLOCKSIZE在512情况下,读写都是没问题的。
因为要进行IAP升级,就要识别SD卡里的文件,所以要运行一个文件系统就是必要的。常用的文件系统FATFS.
第二步:移值FATFS.
FATFS是开源的,直接上官网下载一个。
最新的版本到R0.15了。
网站了介绍了它的函数和结构,可以看看参考下。
下载下来可以直接加入到例程工程中。
需要修改完善的DISKIO.C和FFCONF.H.
先说FFCONFIG.H就是FATFS的配置文件,修改了几处。
然后是DISKIO.C,在这个文件中,要做一些方法与官方的SDIO驱动连接起来。
我是把SD卡挂载到0:下面,所以:
一共有5个函数要做一下连接:
Disk_status:
Disk_initialize:
Disk_read:
Disk_write:
Disk_ioctl:
因为前面测试BLOCKSIZE为1024时老是读写错误,现在我就将BLOCKSIZE固定为512了。
另外,读写函数也改了一点。
到此,FATFS移植完成。可以找到已经格式化的SD卡试试F_MOUNT能不能挂载成功了。因为我们是要使用SD卡内的BIN文件来IAP升级,所以是不能在板上对SD卡进行格式化。在PC上对SD卡进行格式化后,可以用WINHEX软件查看一下扇区数据,如果后面F_MOUNT不成功需要调试时可以用来对比读出的数据。
这是我这张卡的启动扇区数据,显示物理扇区是在128.
F_MOUNT成功后,就可以进入打开文件操作和烧写FLASH了。
找到文件后打开,流程如下:
具体的实现方法:
F_OPENDIR:
F_READDIR:
在目录内读取到文件后,会检查文件名来确认是不是用来IAP的BIN文件。检查规则:
能够用于IAP的文件必须是以0X08开头,以BIN结尾的13字符文件名。里面包含IAP APP的地址。比如0X08009000.BIN,文件名符合规则后。就会用这个文件开始IAP,并且用文件名的数字做为IAP APP的地址。
下一步就是边读文件边烧写FLASH了:
直到文件结束。
最后是就校验了,再次打开文件。边读边与上一步写入FLASH的数据进行比对。
比对没有错误就是IAP 成功了,再把IAP APP 地址写入到一个固定的FLASH地址。下次启动没有进行IAP也可以取得这个IAP APP地址进行跳转。
我把IAP APP地址存放在0X08008000.
至此,IAP功能结束,可以跳转到APP运行了。
做了一个按键跳转,按S1键就跳转入APP运行。这里要注意一点,在跳转前一定要记得关掉中断,比如上图中的TIM6的中断,没关中断的时候一跳转就死机了。
为了在没有串口条件下直观观看IAP结果,利用板载的LED做了一个简单的指示。
IAP 运行中时红灯闪,IAP失败红灯常亮,IAP成功后亮绿灯。
再来看下APP程序这边。直接用官方例程GPIO/LED_BLINK来改一下。
改成红绿兰三个灯闪。很简单。
改中断向量偏移量。
改ROM和RAM配置:
改好后编译,找到BIN文件,改名为0X08009000.bin,存放到SD卡里准备IAP使用。
可以再次用WINHEX看一下这个BIN文件里的数据,如果需要调试时可以做为参照。
万事俱备了,可以做最后的测试了。
把IAP下载到板子上,把包含BIN的SD卡插入卡座。运行。
提示按S1键的时候按一下S1,顺利进入了APP.
有一个小开关DIS_DATA,打开后可以在读取文件时一并显示文件数据,方便调试。
打开显示数据会增加IAP的时间。
另外,可以使用官方的上位机工具来读取FLASH中的数据。比如查看地址0X08000000的IAP程序,和0X08008000上APP跳转地址,0X08009000位置的APP程序。如果有问题需要调试时会有很大帮助。
没插SD卡,IAP失败后亮红灯。
跳转到APP程序后,三个灯一起闪。
IAP成功后亮绿灯。
总结:这不是一个很难的工程,而且官方和网上已经有了很多的资料。需要一些耐心,再加上认真小心的调试,还有一些工具软件,总会有一些成果的。满意的地方是基本上完成预想的功能, 但是这个IAP工程编译出来在开了3级优化的前提下,居然还有接近30K的CODE.
后面还可以找找能删减的部分,减少一些代码量。
附件文件说明:
3个LOG文件分别是开显示数据和不开显示数据,不插SD卡启动时的UART输出LOG。
0X08009000.BIN是启动地址为0X08009000的APP BIN.
附件.rar
(7.73 KB)
NS_SD_IAP.rar
(6.5 MB)
|
申请原创要@21小跑堂噢~