前期回顧
地址、廣播與數據通信配置 | 瑞薩DA14531開發問題及解決方案(系列6) |
DA14531項目進入產品化階段后,問題往往不再只是“功能能不能跑”,而是休眠電流是否達標、固件是否可被讀取、調試口是否關閉、OTA路徑是否可靠,以及晶振校準值是否正確寫入OTP。本文整理幾個量產前容易忽略的細節,方便開發者逐項核對。
01
啟用CFG_DEVELOPMENT_DEBUG導致休眠電流高?
如果測試中發現休眠電流或運行電流與預期不一致,可以先確認工程是否啟用了CFG_DEVELOPMENT_DEBUG。
定義Development Mode后,測試模塊并不會真正將OTP中的內容復制到RAM中運行,而是模擬OTP內容復制到RAM所需的時間;取消該宏定義后,調試接口會關閉,系統會按真實啟動流程將OTP內容復制到RAM中運行,因此電流表現會發生變化,運行電流可能升高。
02
如何防止固件被獲取
固件保護可以分兩層理解:第一層是關閉可訪問入口,例如JTAG和UART;第二層是在存在外部Flash或資產保護需求時,對固件本身進行加密。
2.1 固件位于OTP中,Boot from OTP
如果固件大小小于32KB,且產品開發已經成熟,即可將固件燒錄到OTP中。需要注意,Boot from OTP必須在OTP Header中將Application Flag 1和2設置為Yes,否則芯片不會從OTP中加載代碼。

點擊可查看大圖
2.1.1 禁用JTAG
使用SmartSnippets Toolbox中的OTP功能,打開OTP Header中的Configuration Script:

依次進行以下操作:
選擇指令類型:Development Mode Disable。
點擊Add。
點擊Yes。
完成后即可看到禁用JTAG的指令已經添加。點擊OK后,在OTP Header頁面點擊Burn,即可完成禁用JTAG操作。


2.1.2 禁用UART
在DA14531的BootROM Sequence中,通過設置Application Flag即可禁用UART。詳細流程請參考《DA14531數據手冊(DA14531 Datasheet)》中的Section 4.5: BootROM Sequence。除此之外,請確保固件中未啟用UART功能。
(您可掃描下方二維碼或復制鏈接至瀏覽器中打開參考《DA14531數據手冊(DA14531 Datasheet)》中的Section 4.5: BootROM Sequence)
https://www.dialog-semiconductor.com/sites/default/files/da14531_datasheet_3v1.pdf

2.2 位于Flash中的固件
如果固件位于Flash中,同樣可以通過上述方式禁用JTAG/UART。不同點在于:需要在OTP中燒錄Secondary Bootloader,用于引導DA14531從Flash啟動。
Secondary Bootloader默認未啟用UART功能,同時固件本身也需要確認未啟用UART。完成這些設置后,芯片將無法再通過JTAG或UART進行通信、調試或燒錄,后續固件升級只能通過OTA方式完成。
2.3 創建加密固件
與此同時,如果還擔心固件被竊取,例如拆焊Flash存儲器,或通過另一顆未禁用JTAG的SoC讀取數據。此時可以選擇對固件進行加密。

固件加密可通過兩步實現:使用SmartSnippets Toolbox生成加密固件,并將啟用加密功能的Secondary Bootloader燒錄到OTP中。
2.3.1 創建加密固件

2.3.2 設置密鑰
2.3.3 在Secondary Bootloader中啟用AES_ENCRYPTED_IMAGE_SUPPORTED
該功能已在默認配置中定義。
2.3.4 在Secondary Bootloader的decrypt.c中設置自定義KEY[..]和IV[..],并與生成加密固件時使用的KEY[..]和IV[..]保持一致
按上述方式生成的加密固件也可以通過PLT進行批量生產。同一批次可選擇一組加密數組,也可選擇多組加密數組;若選擇多組加密數組,量產時需要注意匹配關系。


總體來說,防止DA14531被訪問可以通過禁用JTAG/UART實現。如果希望進一步保護固件資產,可以采用固件加密方案。
2.4 如何對加密固件進行SUOTA升級
基本流程與普通SUOTA流程一致,可參考《DA14585/DA14586和DA14531設備BLE SUOTA升級教程(Tutorial BLE SUOTA Update on DA14585/DA14586 and DA14531 Devices)》。
(您可掃描下方二維碼或復制鏈接至瀏覽器中打開參考《DA14585/DA14586和DA14531設備BLE SUOTA升級教程(Tutorial BLE SUOTA Update on DA14585/DA14586 and DA14531 Devices)》)
http://lpccs-docs.dialog-semiconductor.com/Tutorial-BLE-SUOTA-DA145x/index.html

該場景本質上是對加密固件進行SUOTA升級,具體操作如下:
創建加密固件并完成密鑰設置。
對加密固件執行OTA升級。
Secondary Bootloader(SB)可以使用同一版本,燒錄到OTP中,并設置Application Flag。
測試階段可將Secondary Bootloader(SB)燒錄到Flash中。
默認Secondary Bootloader(SB)已啟用AES_ENCRYPTED_IMAGE_SUPPORTED,只會對加密固件執行校驗。
對于未加密固件,不會啟用該校驗過程,相關邏輯位于decrypt.c。

03
JTAG
JTAG由SWDIO和SWCLK組成。在WLCSP17封裝中,SWCLK和SWDIO分別分配給P0_2和P0_5。

對于FCQFN24器件,SWCLK分配給P0_2,SWDIO分配給P0_10。

也可以通過軟件配置將SWDIO分配給P0_1或P0_5。在Booting過程中,JTAG默認未啟用。

如果在任何串行接口上都找不到可啟動設備,Booting程序會根據配置腳本(CS)中存儲的內容執行兩種處理:若CS中存儲了“調試器禁用”(0x70000000)命令,引導程序將重新掃描外圍設備;否則,芯片會在啟用調試器(JTAG)的狀態下進入無限循環。
04
晶振校準(XTAL Trim)
XTAL Trim通過調整DA14531內部兩個電容實現,具體由CLK_FREQ_TRIM_REG寄存器中的值控制。默認值為FF和00,分別對應最大值和最小值。Toolbox中的XTAL Trim Value會寫入該寄存器,寄存器地址為0x50000002。該值保存在OTP Header中。更多時鐘相關信息可參考《DA14531數據手冊(DA14531 Datasheet)》第10章及后續章節。
(您可掃描下方二維碼或復制鏈接至瀏覽器中打開參考《DA14531數據手冊(DA14531 Datasheet)》)
https://www.dialog-semiconductor.com/sites/default/files/da14531_datasheet_3v1.pdf

外部時鐘選型也可參考DA14531硬件設計指導文檔:《DA14531/530硬件設計指南(DA14531/530 Hardware Guidelines)》。
(您可掃描下方二維碼或復制鏈接至瀏覽器中打開參考《DA14531/530硬件設計指南(DA14531/530 Hardware Guidelines)》)
https://www.dialog-semiconductor.com/sites/default/files/an-b-075_da14531_hardware_guidelines_1v4.pdf

4.1 固件位于OTP中,Boot from OTP
開發過DA14580/DA14585的用戶應該知道,若要將晶振校準值燒錄到OTP中,只需向芯片OTP Header中的固定位置寫入一個兩字節數值即可。
DA14531的情況有所不同。DA14531的OTP Header分為兩部分:Configuration Script和Main Group。

其中,Main Group用于存放常用配置,例如SPI Flash引腳、藍牙MAC地址、時間戳等;特定OTP位置具有特定含義。
Configuration Script提供更靈活的配置方式,字段含義與其在OTP中的位置沒有固定對應關系。用戶可通過Toolbox工具中的Add按鈕增加字段,用于聲明某項配置。晶振校準值需要添加到Configuration Script部分中。
4.2 操作步驟
4.2.1 按照下圖方式配置開發板跳帽:

4.2.2 使用Toolbox讀取DA14531當前Configuration Script的值,打開Configuration Script配置頁面,并點擊Add按鈕:

4.2.3 選擇需要配置的寄存器:

4.2.4 添加需要寫入該寄存器的值,然后點擊OK。
4.2.5 需要注意,由于Configuration Script并不是通過OTP中的固定位置表達特定含義,以上步驟只是為了獲取晶振校準值寄存器的OTP位置,以及寄存器寫入值的OTP位置:


由上圖可知:
晶振校準寄存器在DA14531內部的地址為:0x50000002
對應OTP地址為:0x07F87ED0+0x00000078=0x07F87F48
需要寫入該寄存器的值為:0x0000000C
對應OTP地址為:0x07F87ED0+0x0000007C=0x07F87F4C
4.2.6 完成以上配置后,回到Toolbox的OTP Header頁面,點擊Burn按鈕即可將XTRIM值寫入OTP。
4.2.7 除使用Toolbox寫入OTP外,也可以通過prod_test.exe工具寫入OTP。由于OTP只能一次性寫入,若希望通過prod_test.exe完成該操作,則上述步驟4.2.6不能執行。
prod_test.exe工具用法如下:
4.2.8 從官網下載最新SDK,在SDK目錄中找到prod_test.hex(prod_test_531_UART_P05.hex)固件和prod_test.exe工具。將prod_test.hex(prod_test_531_UART_P05.hex)燒錄到開發板中,然后按下開發板復位按鍵啟動固件。
4.2.9 進入命令行界面,輸入以下命令:

prod_test_cmds>prod_test.exe -p 52 OTP_write 7F48 50000002status=0prod_test_cmds>prod_test.exe -p 52 OTP_write 7F4C 000000C0status=0
其中,-p用于指定串口號;7F48和7F4C是相對OTP Header(0x07F80000)的偏移地址。
50000002和0000000C是需要寫入對應OTP地址的數值。
4.2.10 上述操作成功后,重新使用Toolbox連接OTP并讀取OTP Header,可看到與步驟4.2.5一致的內容。
(您可掃描下方二維碼或點擊文末“閱讀原文”到瀏覽器打開查閱瑞薩DA14531的更多信息)
https://www.renesas.cn/zh/products/da14531?queryID=bef252f268be9861239382c1c6246d38

不過從實際上手到跑通demo再到產品落地,開發者可能會遇到各式各樣的問題,因此我們整理了開發者在開發瑞薩DA14531產品時常遇到的問題以及解決方案,覆蓋硬件設計到軟件使用。
希望能幫助大家在瑞薩DA14531的開發過程中更快定位問題、減少調試時間,讓BLE低功耗產品開發更加順利。
如您在使用瑞薩MCU/MPU產品中有任何問題,可識別下方二維碼或復制網址到瀏覽器中打開,進入瑞薩MCU/MPU官方技術論壇尋找答案或獲取在線技術支持。
https://bbs.21ic.com/renesas
END
推薦閱讀
硬件問題排查 | 瑞薩DA14531開發問題及解決方案(系列2)
發射功率、定時器與復位 | 瑞薩DA14531開發問題及解決方案(系列3)
空中升級SUOTA | 瑞薩DA14531開發問題及解決方案(系列4)

