搜索
bottom↓
回复: 10

TKM32F499远程更新参考程序

[复制链接]

出0入143汤圆

发表于 2020-12-15 12:21:53 | 显示全部楼层 |阅读模式
本帖最后由 tiky 于 2020-12-15 14:05 编辑

TKM32F499从最开始的用串口下载,到后来的用USB下载,后来又增加JLINK,DAP等各类仿真下载。今天,将再新增一种下载方式,从SD/TF 卡中下载程序,可以参考这个程序做ESP8266 WIFI远程升级了,以后再也不限载体了。

由于基础驱动都写得差不多了,今天这个程序相对来说就比较简单,调用一下FATFS文件系统函数,然后用QSPI写FLASH就完事;

样例程序中,点击图中“程序更新”进入升级。
updata.png
关键代码如下:
  1. //==============  从SD卡中升级程序 ==============//
  2. #define QSPI_FLASH_SAVE_APP_ADD                 0x10000  //程序存在FLASH中的起始总地址
  3. #define QSPI_FLASH_APP_DATA     0x400        //前面1KB用于存储程序头,例如简单校验,程序长度等,1K后就是程序主体了
  4. char program_updata(char *filename)
  5. {
  6.         FATFS fs;            // Work area (file system object) for logical drive
  7.         FIL fsrc;                              // file objects
  8.         FRESULT res;         // FatFs function common result code
  9.         UINT br;                         // File R/W count
  10.        
  11.         u8 Buf[512];
  12.         u32 addTemp=QSPI_FLASH_APP_DATA + QSPI_FLASH_SAVE_APP_ADD;
  13.         u32         temp=0,bin_size,erasedAdd;
  14.         erasedAdd=QSPI_FLASH_SAVE_APP_ADD;
  15.   res = f_mount (&fs, "0:", 1);//挂载文件系统
  16.   res = f_open(&fsrc, filename, FA_OPEN_EXISTING | FA_READ);         //打开传进来的文件
  17.        
  18.   if(res!=FR_OK){ //打开文件存在错误
  19.                  f_close(&fsrc);
  20.      f_mount (NULL, "0:", 1);//注销文件系统
  21.                  return 0;
  22.   }
  23.         bin_size= fsrc.obj.objsize;//获取文件长度
  24.         if(bin_size==0)
  25.         {
  26.                 f_close(&fsrc);
  27.     f_mount (NULL, "0:", 1);//注销文件系统
  28.                 return 0;
  29.         }
  30.         if(bin_size<= 1024*1024*2)//目前设定最高FLASH 存储容量是2MB
  31.                 {
  32.                         bin_size+=0x10000;
  33.                         while(erasedAdd<bin_size)
  34.                         {
  35.                                 QFLASH_FunErase(erasedAdd,1);//eType 0:SE_Com , 1:BE64K_Com
  36.                                 erasedAdd += 0x10000;
  37.                         }       
  38.                 }
  39.                 else
  40.                 {
  41.                         f_close(&fsrc);
  42.       f_mount (NULL, "0:", 1);//注销文件系统
  43.                   return 0;
  44.                 }
  45.        
  46.                 bin_size= fsrc.obj.objsize;
  47.         do
  48.     {
  49.       f_read(&fsrc, Buf, 512, &br);
  50.       QFLASH_FunProgram(addTemp, ( unsigned char *)(Buf), 512);
  51.                         addTemp+=512;
  52.       bin_size -= 512;
  53.     }
  54.    while(bin_size > 511);
  55.                 if(bin_size)
  56.                 {
  57.                         f_read(&fsrc, Buf, bin_size, &br);
  58.                         QFLASH_FunProgram(addTemp, ( unsigned char *)(Buf), bin_size);
  59.                 }
  60.                 //==============  写入程序头 ==============//
  61.                 *(u32*)(Buf)    =  0x70020000 ;//程序存放在RAM中的起始地址,与KEIL设置中一致
  62.                 *(u32*)(Buf+4)  =  ~0x70020000 ;
  63.                 *(u32*)(Buf+8)  =  fsrc.obj.objsize;//程序长度
  64.                 *(u32*)(Buf+12) =  ~(fsrc.obj.objsize);       
  65.                 QSPI_PageXbytesProgram_Standard_NoCheck(0x10000, ( unsigned char *)(Buf), 16);//程序头目前只写两个参数,程序存放的RAM起始地址及长度
  66.                
  67.                 f_close(&fsrc);//升级完成,关闭文件
  68.                 f_mount (NULL, "0:", 1);//注销文件系统
  69.                 return 1;
  70. }
复制代码


程序逻辑是这样的,举例:你要把一个点灯程序tk499.bin放到SD卡上升级进去,那先把这个tk499.bin文件复制到SD卡的根目录下,然后在程序中打开这个文件就行 program_updata("tk499.bin");仅需要调用一个函数即可以实现升级。

核心程序流程:先open传进来的文件,获取文件长度,然后按照文件长度擦除足够的FLASH(注意:用64K模式擦除,速度快),然后就一个扇区一个扇区从SD卡中读取文件写入FLASH,最后不足一个扇区的数据单独写入;最后,主体程序写完了,要写一个程序头,告诉bootloader,这个程序应该放在哪个地址的RAM上运行,及程序的长度。这两个参数均取反一次存入,以便bootloader校验。这样就升级完成了,关机再开一下就是新的程序了。

用最新emWin版本写的程序: TK499_emWin6.14_SmartBoard_TK043F1168横屏版_按键图标模版.rar (15.77 MB)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 23:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表