收藏官网首页
查看: 10015|回复: 0

[技术分享] STM32F103RC空中升级MCU固件FATFS和FLASH处理方式

1

主题

1

帖子

20

积分

新手上路

Rank: 1

积分
20
跳转到指定楼层
楼主
发表于 2018-7-17 17:37:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
教您5分钟接入机智云,实现傻瓜式开发
本帖最后由 琛依 于 2018-7-17 17:39 编辑

实验芯片:STM32F103RC  

FATFS文件夹里的工程是使用SD卡来储存新的固件 接收完成并校验成功后复位芯片 启动BootLoader去写入到MCU Flash
FLASH文件夹里面的工程是将Flash分开 将新的固件接收并保存到代码空间的后半部分 接受完成后复位MCU 启动BootLoader去将新的固件复制到代码运行区

FATFS地址分配:
256KFlash分三片区域使用
一、23KB         BootLoader           0x08000000
二、1KB           UpdateParam        0x08005C00
三、232KB        App                        0x08006000
更新文件储存到SD卡 0:update.bin


FLASH地址分配:
256KFlash分四片区域使用
一、11KB         BootLoader           0x08000000
二、1KB           UpdateParam        0x08002C00
三、122KB        App                        0x08003000
四、122KB        AppBak                0x08021800


说明:
1这两个工程都没有使用到【数据点】且数据点处理的代码都已经删减  个人使用的是透传方式来通讯
2BootLoader使用串口2打印日志 APP使用usb(程序会模拟一个stm32的com口)打印日志  (可根据自己需求修改宏定义即可)
3在调试过程中发现不可以使用DMA去发送数据到esp8266  不知道是什么缘故 ESP8266不会应答 目前是使用字节来发送  
4ESP8266数据的接收也修改成字节中断 因为Gizwits_protocol是有使用缓冲切抓包的方式就没使用DMA+IDLE中断

5 修改gizwits_protocol文件里面所有函数的局部变量的创建 例如gizwitsPassthroughData函数的tx_buf 直接在函数里创建会导致堆栈溢出 我这两个工程代码都是使用动态内存分配的 所以所有过大局部变量创建的函数我都修改成mymalloc去分配内存 如果不使用动态内存则需要把Stack_Size设置到4096字节 否则会出现不可预期的后果
6 在system_stm32f10x.c文件里  有个宏定义VECT_TAB_OFFSET是中断向量表的偏移设置  (APP代码必须修改,否则程序无法进入中断)
7 APP工程代码的FATFS是使用到了936.c文件的  所以bin文件会较大 可以再936.c的#if 1改成#if0就行了  但是这样文件就不能使用中文去命名

部分日志:
[network] WIFI_CON_M2M
MCU2WiFi[6339:  10]: ff ff 00 06 21 00 00 00 00 27
[network] WIFI_RSSI 7
Get One Packet!
WiFi2MCU[6429:  74]: ff ff 00 46 22 00 00 00 01 30 30 30 30 30 30 30 34 30 30 45 53 50 38 32 36 30 34 30 32 30 30 33 34 36 30 30 31 39 34 33 34 34 32 41 38 00 00 00 00 31 39 32 2e 31 36 38 2e 31 33 37 2e 35 34 00 00 00 00 00 00 00 00 00 02 a7
Ack GET_Module success
[network] MODULE_INFO :
Type: 1
serialVer: 00000004
hardVer: 00ESP826
softVer: 04020034
mac: 6001943442A8
ip: 192.168.137.54
Get One Packet!
WiFi2MCU[10053:  47]: ff ff 00 2b 19 05 00 00 00 03 64 a0 00 20 66 38 66 35 62 62 66 64 35 35 39 31 30 64 34 63 37 31 62 31 33 64 64 66 64 65 37 38 63 38 36 34 cf
CMD_ASK_BIGDATA
MCU2WiFi[10070:   9]: ff ff 00 05 1a 05 00 00 24
Update file size = 222368
Create "update.bin" done.
FileMD5len  = 32 MD5: 66 38 66 35 62 62 66 64 35 35 39 31 30 64 34 63 37 31 62 31 33 64 64 66 64 65 37 38 63 38 36 34
MD5_Hex: f8 f5 bb fd 55 91 0d 4c 71 b1 3d df de 78 c8 64
GAgent_MD5Init
MCU2WiFi[10130:  45]: ff ff 00 29 1b 01 00 00 00 20 66 38 66 35 62 62 66 64 35 35 39 31 30 64 34 63 37 31 62 31 33 64 64 66 64 65 37 38 63 38 36 34 02 00 c6
MCU Ready Update
System In OTA Mode BusyFlag = 1
Get One Packet!
WiFi2MCU[10146:   9]: ff ff 00 05 1c 01 00 00 22
Get One Packet!
WiFi2MCU[10693: 525]: ff ff 02 09 1d 06 00 00 00 01 01 b3 98 61 00 20 45 61 00 08 ad 88 00 08 0d 87 00 08 a9 88 00 08 e5 67 00 08 25 c1 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a5 af 00 08 a9 72 00 08 00 00 00 00 e5 8a 00 08 49 b8 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 cd 94 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 cd 6c 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 f1 bf 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 ad b8 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 45 ba 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 4d bd 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 79 97 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 5f 61 00 08 df f8 0c d0 00 f0 86 fa 00 48 00 47 09 07 01 08 98 61 00 20 06 48 80 47 06 48 00 47 fe e7 fe e7 fe e7 fe e7 fe e7 fe e7 fe e7 fe e7 fe e7 fe e7 4d b8 00 08 31 61 00 08 2d e9 f0 41 00 24 25 46 00 29 05 da 01 24 00 27 d0 eb 07 00 67 eb 01 01 00 2b 05 da 00 27 d2 eb 07 02 01 25 67 eb 03 03 00 f0 73 f8 86 46 0e 46 17 46 9c 46 ac 42 04 d0 00 25 d0 eb 05 0e 65 eb 01 06 24 b1 00 20 d2 eb 00 07 60 eb 03 0c 70 46 31 46 3a 46 63 46 bd e8 f0 81 40 ea 01 03 9b 07 03 d0 09 e0 08 c9 12 1f 08 c0 04 2a fa d2 03 e0 11 f8 01 3b 00 f8 01 3b 52 1e f9 d2 70 47 d2 b2 01 e0 00 f8 01 2b 49 1e fb d2 70 47 00 22 f6 e7 10 b5 13 46 0a 46 04 46 4f
**piecenum = 1 , piececount = 435, pieceSize = 512**

...............................................................................................................................................
WiFi2MCU[286142: 525]: ff ff 02 09 1d b7 00 00 01 b2 01 b3 60 01 62 01 64 01 66 01 68 01 6a 01 6c 01 6e 01 70 01 72 01 74 01 76 01 79 01 7b 01 7d 01 91 01 91 03 92 03 93 03 94 03 95 03 96 03 97 03 98 03 99 03 9a 03 9b 03 9c 03 9d 03 9e 03 9f 03 a0 03 a1 03 a3 03 a4 03 a5 03 a6 03 a7 03 a8 03 a9 03 aa 03 10 04 11 04 12 04 13 04 14 04 15 04 16 04 17 04 18 04 19 04 1a 04 1b 04 1c 04 1d 04 1e 04 1f 04 20 04 21 04 22 04 23 04 24 04 25 04 26 04 27 04 28 04 29 04 2a 04 2b 04 2c 04 2d 04 2e 04 2f 04 01 04 02 04 03 04 04 04 05 04 06 04 07 04 08 04 09 04 0a 04 0b 04 0c 04 0e 04 0f 04 60 21 61 21 62 21 63 21 64 21 65 21 66 21 67 21 68 21 69 21 6a 21 6b 21 6c 21 6d 21 6e 21 6f 21 21 ff 22 ff 23 ff 24 ff 25 ff 26 ff 27 ff 28 ff 29 ff 2a ff 2b ff 2c ff 2d ff 2e ff 2f ff 30 ff 31 ff 32 ff 33 ff 34 ff 35 ff 36 ff 37 ff 38 ff 39 ff 3a ff 00 00 00 03 03 06 01 04 06 02 05 00 03 05 1f 1c 1f 1e 1f 1e 1f 1f 1e 1f 1e 1f 12 01 00 02 02 00 00 40 83 04 40 57 00 02 01 02 03 01 09 02 43 00 02 01 00 c0 32 09 04 00 00 01 02 02 01 00 05 24 00 10 01 05 24 01 00 01 04 24 02 02 05 24 06 00 01 07 05 82 03 08 00 ff 09 04 01 00 02 0a 00 00 00 07 05 03 02 80 00 00 07 05 81 02 80 00 00 04 03 09 04 26 03 53 00 54 00 4d 00 69 00 63 00 72 00 6f 00 65 00 6c 00 65 00 63 00 74 00 72 00 6f 00 6e 00 69 00 63 00 73 00 32 03 53 00 54 00 4d 00 33 00 32 00 20 00 56 00 69 00 72 00 74 00 75 00 61 00 6c 00 20 00 43 00 4f 00 4d 00 20 00 50 00 6f 00 72 00 74 00 20 00 20 00 00 00 00 f0 c3 03 08 00 00 00 20 00 02 00 00 88 67 00 08 a0 c4 03 08 00 02 00 20 98 5f 00 00 34 c4 00 08 10 0b 19 0a 01 08 05 0b 01 08 40 04 32 20 2c 68 99
**piecenum = 434 , piececount = 435, pieceSize = 512**
MCU2WiFi[286210:   9]: ff ff 00 05 1e b7 00 00 da
Get One Packet!
WiFi2MCU[286392: 173]: ff ff 00 a9 1d b8 00 00 01 b3 01 b3 40 2c 08 03 19 0f 68 02 43 80 a2 60 02 27 01 2d 01 02 03 04 04 10 09 06 07 08 09 02 04 06 08 ac a2 4a 04 1c 29 18 01 1e 14 1a 03 53 12 54 12 4d 12 33 02 1f 32 13 ad 72 0c 1c 08 af 88 04 0b 10 39 73 14 91 2a c2 d6 12 08 1a 04 07 13 b9 c3 14 08 71 c2 1b 08 99 08 1a b5 04 13 61 c1 1b 08 49 10 1a 31 04 1a d9 0c 1a c5 04 1a 09 0c 41 32 40 29 48 1a 59 28 09 16 78 1a 71 1c 36 1c c3 03 08 12 1a 2e 08 32 43 1a 71 08 32 04 1a 75 08 32 26 1a 9b 08 29 e4 22 ea 73 20 1a 29 92 01 14 00 00 ec
**piecenum = 435 , piececount = 435, pieceSize = 160**
MD5 Calculate Success , Will Check The MD5 ..
MD5 Check Success ,Storage sdcard Success , Write Update Flag

BootLoader的日志我这边没有引出串口2所有没办法弄出来了
代码传送门->https://download.csdn.net/download/u011179981/10547081


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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