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。