Other Parts Discussed in Thread: UNIFLASH,
想請問一下,CC2340除了CCS以外是否有其他專門的燒錄軟體?
我想要燒錄兩個程式進去,但其中一個我想要設定讓他在後面一點才開始寫入
例如:有一主程式以及一個判斷是否要更新的小程式,一開始會先執行判斷更新的小程式,如果沒有要更新就直接跳到主程式開始執行,反之如果要更新就會複寫主程式
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
从描述来看,似乎 OAD 可以满足您的需求,可以看看这个 example :https://dev.ti.com/tirex/explore/node?node=A__AL5n1L3QNp84tENGHkLmqw__com.ti.SIMPLELINK_LOWPOWER_F3_SDK_BLE5STACK_MODULE__58mgN04__LATEST
看起來沒甚麼異常,我設置的指令是"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/armofd" "${CG_TOOL_ROOT}/bin/armhex" "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin"
昨天我这边试了下,一开始也没有生成 .bin 文件。
看 build log 里面有个 failed:
"C:/Users/X1122803/ccs/utils/tiobj2bin/tiobj2bin" "basic_ble_CC26X2R1_LAUNCHXL_tirtos7_ticlang.out" "basic_ble_CC26X2R1_LAUNCHXL_tirtos7_ticlang.bin" "C:/Users/X1122803/ccs/tools/compiler/ti-cgt-armllvm_2.1.3.LTS/bin/armofd" "C:/Users/X1122803/ccs/tools/compiler/ti-cgt-armllvm_2.1.3.LTS/bin/armhex" "C:/Users/X1122803/ccs/utils/tiobj2bin/mkhex4bin"
tiobj2bin.bat failed on C:/Users/X1122803/ccs/tools/compiler/ti-cgt-armllvm_2.1.3.LTS/bin/armofd
Please see processors.wiki.ti.com/.../Tiobj2bin_Failed
tiobj2bin.bat failed on C:/Users/X1122803/ccs/tools/compiler/ti-cgt-armllvm_2.1.3.LTS/bin/armhex
Please see processors.wiki.ti.com/.../Tiobj2bin_Failed
C:/Users/X1122803/ccs/utils/tiobj2bin/mkhex4bin failure occurred. Giving up.
我是这样解决的:
我是复制这个链接中的:https://zhuanlan.zhihu.com/p/158154724
${CG_TOOL_HEX} -order MS --memwidth=8 --romwidth=8 --intel -o ${ProjName}.hex ${ProjName}.out "${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin" "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/armofd" "${CG_TOOL_ROOT}/bin/armhex" "${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin"
抱歉造成了混乱。
CC2340 的地址不是连续的,后面有一块在0x4002E000,所以转成 .bin 的话就很大,这是正常的。
如果需要,可以参考这个例程把 .bin 和最后的 ccfg 分开:C:\ti\simplelink_lowpower_f3_sdk_7_40_00_64\examples\rtos\LP_EM_CC2340R5\ble5stack\basic_ble_oad_onchip
1.想請問一下為何CC2340的地址會跳到0x4E020000,是基於什麼樣的規則導致他在燒錄時會跳到那邊嗎?
2.是否能讓CC2340的地址能夠依序燒錄,而不會燒錄到一半跳到類似0x4E020000的位址
1.请参阅 Technical Reference Mannual 8.5.4 章节,.bin 文件包括了最后扇区 ccfg 的大小,因此会大很多:
可以使用uniFlash导出数据看看:
host_test_512k.bin(512K字节),地址范围:0x0 - 0x7FFFF
ccfg.bin(2K字节),地址范围:0x4e020000 - 0x4E0207FF
2.
2.是否能讓CC2340的地址能夠依序燒錄,而不會燒錄到一半跳到類似0x4E020000的位址
上面建议您把 .bin 和最后的 ccfg 分开,这样就不会包括 ccfg 的大小
我想要燒錄兩個project,(1)bootloader的小程式:用於之後更新主程式 (2) 主程式
目前嘗試了幾個方法:
1.使用uniFlash 同時Load 兩個hex檔
結果如下:
2.使用uniFlash 並在其中一個hex 設置起始位址
結果如下:
設置起始位址的HEX檔,LOAD進去的值是錯的
3.把兩個project的HEX檔合併在一起(包含CCFG的部分),之後只LOAD一個HEX檔
結果會跳出CRC32的錯誤
1.使用uniFlash 同時Load 兩個hex檔
请查看 OAD 上的 simplelink academy 实验,以及如何创造image:
3.把兩個project的HEX檔合併在一起,之後只LOAD一個HEX檔
結果會跳出CRC32的錯誤
您是如何合并的?可以看下这个和您一样问题的帖子:https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1243866/cc2340r5-basic-ble-example-public-address-mode/4710196
第2.方法是我搞錯,我勾選到了bin檔才能夠輸入起始位址,hex檔本身似乎不給輸入起始位址
第3.方法,我嘗試把其中一個Hex檔的CCFG部分刪除,只留Flash的部分,之後複製到另一個Hex檔的CCFG前面
謝謝你的建議,目前我找到另一個方法,先利用UniFlash燒錄Project的hex檔,之後到UniFlash的Memory右上有個Export,它可以選擇要從記憶體位址的start到End去擷取,並且匯出成bin檔。
我利用這個方法測試,將uartcallback這個Project產出一個bin檔(沒有CCFG部分),以及basic_ble這個Project產出一個bin檔(沒有CCFG部分),最後再另外產出一個bin檔是"只有CCFG"的,因為我發現兩個Project的CCFG都一樣,但我不確定會不會有問題。
再來我做了2個測試:
1.讓uartcallback的bin檔從0x00000000開始燒錄,接續才燒錄basic_ble的bin檔,最後再0x4E020000燒錄CCFG的bin檔,燒錄完成後按UniFlash左上的Session-> Load Session。
測試結果 : 燒錄成功,不會廣播資料(因為basic_ble這個Project正常是會廣播的,但由於是uartcallback先執行,所以不會廣播資料)
2.讓basic_ble的bin檔從0x00000000開始燒錄,接續才燒錄uartcallback的bin檔,最後再0x4E020000燒錄CCFG的bin檔,燒錄完成後按UniFlash左上的Session-> Load Session。
測試結果 : 燒錄成功,會廣播資料(因為basic_ble這個Project正常是會廣播的)
無法確認位址比較後面才燒錄的那個Project能不能成功執行
如何设置跳转指令?这个问题查看链接回复:https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1328704/cc2340r5-jump-to-address
另外,建议请参阅命令行中使用 UniFlash 读取其 MAC 地址:https://software-dl.ti.com/ccs/esd/uniflash/docs/v7_0/uniflash_quick_start_guide.html#memory-mode
dslite 可以在内存模式下使用来读取特定范围的内存,选择正确的内存范围。
1. 有使用uniFlash看過Memory,在0x00004000的位址的值與basic_ble项目的bin檔開頭內容是一樣的。
2.例如GPIO . NVS . LPGTimer等等嗎?
3.命令行中使用 UniFlash 读取其 MAC 地址,是為了能夠正確的擷取每個Project的位址範圍並匯出嗎?
是的,您的理解是对的。
第二个.bin 文件没有执行的原因可能有:
另外,这个链接中的解决方案或许对您有帮助:https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1048479/cc2640r2l-updateable-firmware-does-not-start/3887618
1.CCFG要去哪裡設置?
2.我目前燒錄兩個Project,是可以共用CCFG的嗎,會不會有可能出錯?
3.CCFG區域存的是甚麼? Syscfg的設定嗎? 是否有CCFG裡面儲存內容的資料
参考 CC2340 reference manual 第九章节:https://www.ti.com/lit/ug/swcu193/swcu193.pdf?ts=1708925534712&ref_url=https%253A%252F%252Fe2e.ti.com%252F
謝謝,我嘗試設中斷點執行到跳位址的地方,單步執行後就進入faultISR的while裡面,
而我參考了你給我的文章,進入faultISR有可能是進入無效的位址,但我使用uniFlash看過確實是有值的
我查看了.map並沒有任何相關的指令,我上傳了.map檔,裡面似乎沒有有關JUMP_TO_APPLICATION這個函式的相關Assembly
我jump到0x4804這個address
有可能是因為CC2340並沒有成功執行asm的code嗎?
uart2callback_LP_EM_CC2340R5_freertos_ticlang.map
還有個問題,CCS無法使用asm讓暫存器去加常數嗎?
像下面這個例子,我讓R0暫存器+4 存到R0 卻編譯失敗
我參考了這個文章ARM Assembly Language Tools v20.2.0.LTS User's Guide (Rev. Z) (ti.com)
看起來應該要是可以才對
我使用uniFlash的Memory的Export功能,分別擷取
(1)test_ble_1是basic_ble_LP 的 主程式
(2)test_ble_2是basic_ble_LP 的 NVS區域
(3) test_ccfg 是 CCFG部分
(4) test_uart_1 是 uartcallback的
我在英文論壇中提問 連結 :CC2340R5: Jump to address - Bluetooth forum - Bluetooth®︎ - TI E2E support forums
他們回覆說JUMP_TO_APPLICATION" is not an API referenced by the SDK.
是否有可能是我的uartcallback那個process並沒有中斷導致他進入faultISR ,而無法從0x4800開始往下執行嗎?
PS.我附上了我的bin檔
正如英文论坛工程师所说:“JUMP_TO_APPLICATION”不是SDK引用的API,创建自定义引导加载程序,建议从 mcuboot 和basic_ble_off_chip项目开始。此方法使用两个单独的应用程序/项目从 mcuboot 中的重置开始并跳转到有效的 basic_ble 项目。
可以重点查看学习一下这部分内容: Bluetooth LE SimpleLink Academy Labs
1.mcuboot只能跟basic_ble_off_chip這個項目進行搭配嗎?
2.mcuboot似乎是使用OAD進行更新,但是我想要使用uart進行更新,也是一樣嗎?
1.不一定,只要项目支持 MCUboot 的引导和固件更新流程即可。根据需要配置和集成到项目中。
2.可以配置 MCUboot ,使它支持通过 uart 接口进行固件更新。
另外您是否可以考虑将你需要的这两个 project 合并到一个项目中。
我想先釐清幾個點
1. 目前來說燒錄兩個Project,並使用ARM Assembly的BX直接跳至第二個Project的起始位址,這個方法是完全不可行的?
2.如果使用mcuboot_LP_EM_CC2340R5_nortos_ticlang這個Project,是有辦法跳到basic_ble這個Project的起始位址?
想要解决两个不同 project 链接到一起进行烧录的问题,建议还是询问一下 E2E 的资深工程师:CC2340R5: Jump to address - Bluetooth forum - Bluetooth®︎ - TI E2E support forums
如果基于目前遇到的困难给出的解决方案不清晰,您可以把具体需求告诉工程师,看看是否有其它更好的方案。
1.您上面提到的第一种方式,目前没有实际应用过,或者您是从哪里得知的?
2.可以,但是具体实现方式您需要再了解一下。
了解,謝謝
1. 第一種方法是參考以前的公司專案進行嘗試(但不是CC23XX系列),如果能直接跳轉過去,相對來說會簡易一些
2.有關於MCUboot這個Project的相關文章或資料能查閱嗎? 例如之前是否有人能夠成功從MCUboot去跳轉到別的Project等等
1.明白您的需求,建议还是等一下 E2E 回复,看如何实现吧
2.上面回答中的链接针对 MCUboot 的介绍很详细,实现的细节也可以看一下这个链接:https://docs.mcuboot.com/
之前是否有人能夠成功從MCUboot去跳轉到別的Project等等
有的,可以在E2E搜索一下相关问题。
1.針對MCUBoot有實際操作的文章嗎,這個連結https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1253232/cc2340r5-how-about-mcuboot-over-the-uart-download/4758802
我已經看過,但是是技術文章,是否有實際操作的範例之類的?
2.Syscfg裡面的Device Configuration -> Bootloader Configuration也是Bootloader的嗎?