CH579网络IAP升级的源码可以从码云(Gitee)上git clone下来。

码云地址:https://gitee.com/maji19971221/wch-ch57x

以下是一个朋友问的几个常见问题,这边弄一个总结文档。

一、MCU基本工作机理方面的疑问:

1,“bootloader_vector_dynamic_test” 文件部分:

疑问:

1) 这块程序看着只是将MCU程序执行的代码启动重定位到0x400吗? 像原来的中断向量TIMR0(0X0040), ……, ETH(0X005C), 等等是否有变化?

答:是的,因为M0内核的MCU 。需要在FLASH最前面放中断向量表,否则程序无法正常启动。所以在程序的最前面放了一个中断跳转的工程。0x400和0x4400一个就是IAP程序,一个就是APP用户程序的起始地址。

2) MCU执行代码的流程是如何的?是从MSP的地址开始执行,然后跳转到其他指定地址去执行吗(是何时指定这个地址的?)?。*.bin文件用贵司的工具生成后,默认带了私有的16bytes头,IAP_FLASH逻辑是将升级*.bin代码放到0x4400地址,然后跳转到0x4400地址执行APP程序的吗?那0x4400地址代码放的是私有的16bytes头信息,如何执行APP程序的?

答:16个字节的数据因为实在一开始传过来的,所以是单独处理的。具体可以看用户程序里面,以太网的接收函数那部分。然后后面的APP才是放在0x4400。

3) 升级标志位不用dataflash存,单独划出512字节code区(比如最末尾区域)来存储升级标识是否可以?

答:可以。只要你别把这块FLASH擦除即可。

一、Demo代码的方面的实现疑问:

疑问

1)FLASH文件里面IAP升级程序,98*1024地址是0x18800.

入下图 tcpclient文件里面下载bin写到flash是bin_addr=0x14400, 两个地址感觉对不上?

答:这个是因为hextobin软件的原因。因为工程时从0x4400开始。但是软件在转成bin文件的时候,前面0x00-0x4400都是0所以造成了浪费。所以0x18800就是0x4400+0x10000+0x4400。如果你自己可以做一个hextobin软件,把前面0去掉,那么就可以从0x14400开始了。

2)FLASH文件里面IAP升级程序,蓝色虚框里面的“code_addr<162*1024”.是什么含义,没看明白。

答:根据上面的回答,可以知道下载下来的程序是放在0x18800的地址。这个就是98KB,再加上我定义的用户程序是64KB,98+64 =162KB。

最新文章

  1. iOS中RSA加密详解
  2. JavaScript基本语法(一)
  3. polling 和 long polling 工作原理
  4. C#创建Excel
  5. Linux硬链接和符号链接(转)
  6. Android自定义日历,可以点击、标注日期、节气、旧历等
  7. poj2388---求奇数个数字的最中间的数
  8. ODBC、OLE DB、 ADO、ODAC、ODP.NET
  9. LeetCode OJ 292.Nim Gam148. Sort List
  10. 网上搜集的一段php可逆加密函数
  11. 01-java前言、入门程序、变量、常量
  12. 文本分布式表示(一):word2vec理论
  13. 关于Oracle单行函数的讲解
  14. C运算符
  15. MySql数据库实现分布式的主从结构
  16. centos 7 安装iptables防火墙
  17. -webkit-line-clamp超出省略
  18. zTree的简单例子
  19. Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)(XE10.1+小米5)
  20. 2081.09.22 Kuma(非旋treap)

热门文章

  1. HDU3001 Travelling (状压DP)
  2. 修改端口号还是无法启动第二个tomcat的原因
  3. .NET平台下一个你不知道的框架,我只想说两个字:“牛逼”
  4. v-for和router-link的共同使用
  5. 5.pygame快速入门-精灵和精灵组
  6. SpringBoot Starter缘起
  7. html中可以写php代码,但是文件后缀名需要是.php而不是.html。否则php程序不会被解析执行。
  8. letcode刷题记录-day01-两数之和
  9. el-scrollbar 监测滚动条
  10. MPC:百万富翁问题