1.燒寫otp image(你的**,你會發現**並沒有燒寫完0x40000到0x4ffff的位址內容...)
2.在otp header介面下read from memory 讀出原有header配置資訊,直接在上面修改以下項:
(address)0x47f00--(value)yes
(address)0x47f04--(value)yes
(address)0x47ff4--(value)otp at 0
修改完後再burn回晶元去,程式就會從otp啟動了
3.以上均為個人測試而得,有兩個需要注意的:一是otp一次燒寫,以後每次燒寫都只能覆蓋,位址裡每一位置1就不能改回 0,所以燒寫image需慎重;二是一旦從otp啟動,藍芽的物理id(xx.xx.xx.xx.xx.xx)將由header表裡0x47fd4,0x47fd8這兩位的資料而定,而不是**裡寫的了。。。這個貌似也可以在**裡修改設定,我還沒找到~~
2、da14580x_config_advanced.h中將 #define cfg_lp_clk lp_clk_rcx20 這裡巨集定義很重要,如果你外部沒有接32k,這裡一定要配置成內部,不然進入低功耗起不來
da14580 為了把功耗做的很低,在低功耗的模式的時候大部分外設都會關掉,包括io口
arch_turn_peripherals_off()這個是睡眠之前對配置全部關掉。setbits16(sys_ctrl_reg, pad_latch_en, 0); 這個是鎖定管腳
系統喚醒之後會呼叫外設初始化,periph_init()
在set_pad_functions(),獲取io口狀態,然後重新設定
setbits16(sys_ctrl_reg, pad_latch_en, 1) 把引腳從鎖死狀態下 解開
在進入擴充套件睡眠的時候,ram資料是不儲存的,只有在變數後面加
__attribute__((section("retention_mem_area0"),zero_init))
這個變數才會休眠儲存
所以在設計這個任務執行的時候要特別注意,那些變數是進入需要睡眠儲存的,避免出現一些很奇怪的問題
在休眠喚醒後也需要先把外設再初始化
if (getbits16(sys_stat_reg, per_is_down))
da14580 SUOTA 空中公升級
2 編譯應用檔案 編譯後生成hex檔案 smart tag 580.hex 備用 3 hex轉bin 4 使用mkimage將應用程式bin檔案打包成img格式 5 使用mkimage將img格式的應用檔案和bin格式的bootloader打包成乙個bin檔案 6 將5中生成的bin檔案通過smar...
看門狗定時器在DA14580 中的用法
看門狗定時器是乙個計數器,基本功能是在發生軟體問題和程式跑飛後使系統重新啟動。看門狗程式正常工作時自動計數,程式流程定期將其復位清零,如果系統在某處卡死或跑飛,該定時器將溢位,並將進入中斷,在中斷中執行一些復位操作,從而使系統恢復正常的工作狀態。watchdog timer在datasheet中的定...
字尾陣列 da演算法
sa陣列,他儲存1.n 的某個排列,sa 2 sa n 並且保證 suffix sa i suffix sa i 1 1 i 也就是將 s 的 n 個字尾從小到大進行排序之後把排好序的字尾的開頭位置順次放入 sa 中。rank陣列,他儲存的是每個位置的字尾子串的排名,與sa陣列是可以互逆的。heig...