大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是SRC_SBMRx寄存器對於定位i.MXRT1xxx離線無法啟動問題的意義。 最近有一位開源社區大佬在使能 RT1050 BEE 加密過程中遇到無法啟動問題,折騰到一度崩潰,甚至想要棄坑。痞子衡哪能讓這位“老鄉”跑掉,連忙給予緊急支持, ...
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是SRC_SBMRx寄存器對於定位i.MXRT1xxx離線無法啟動問題的意義。
最近有一位開源社區大佬在使能 RT1050 BEE 加密過程中遇到無法啟動問題,折騰到一度崩潰,甚至想要棄坑。痞子衡哪能讓這位“老鄉”跑掉,連忙給予緊急支持,一番瞭解下來,其實這位大佬已經做好了大部分的工作,但是卡在了一個非常小的啟動配置問題上面(他以為他配置好了 BOOT_CFG1[1] - EncryptedXIP,但其實配置並沒有生效),這不禁讓痞子衡思考,為什麼大佬會卡在這裡?於是便有了今天的文章,希望通過本篇文章,讓所有的 RT 開發者再遇到無法啟動問題時,養成第一時間檢查 SRC_SBMR1/2 寄存器的意識。
- Note: 本文適用全部的 RT10xx 以及 RT1160/1170。
一、從參考手冊中的美麗誤會說起
在進入正題之前,痞子衡先讓大家看一段參考手冊里的文字,這段文字存在於全部 RT10xx 的參考手冊里(比如 RT1050 RM Rev.5 里)。這段文字講得是當 SRC_GPR10[28] 位被置起來的時候,BootROM 用 SRC_GPR9 寄存器來替代 SRC_SBMR1 來決定啟動設備以及相關配置。
- Note: SRC 模塊的寄存器僅在 POR 複位時才會被置位,普通系統軟複位不會改變其內容。
如果這段文字是真的,那我們就可以通過調試器直接改寫 SRC_GPR9/10 的值再軟複位從而切換啟動設備,不再需要像往常那樣重設 BOOT_CFG pins/fuse 再硬複位來做切換了。就像這樣:
但是很遺憾,這段內容是個美麗的錯誤,它是從 i.MX6ULL 參考手冊里直接複製過來的,我們知道 RT 就是脫胎於 6ULL 的架構,但是 RT 的 BootROM 里並沒有真的實現這個功能。
二、SRC_SBMRx寄存器作用
如果你註意看,上面那個參考手冊里的美麗誤會其實告訴了我們一件事,那就是 BootROM 其實是通過 SRC_SBMR1 寄存器來獲取啟動設備以及相關配置(BOOT_CFG)的。既然如此,當我們配置了 BOOT_CFG pins/fuse 的時候,不妨通過 SRC_SBMR1 寄存器來檢查一下配置是否真的生效。除此以外,BootROM 也是通過 SRC_SBMR2 來獲取啟動模式的,因此這兩個寄存器 SRC_SBMR1/2 的值非常重要。
啟動配置項 | 啟動檢查項 |
---|---|
啟動模式 BOOT_MODE[1:0]引腳 |
SRC_SBMR2[BMOD] |
啟動模式輔助項 Fuse BT_FUSE_SEL 位 |
SRC_SBMR2[BT_FUSE_SEL] |
啟動設備選擇 BT_CFG[7:0]引腳 / Fuse BOOT_CFG1[7:0] BT_CFG[11:8]引腳 / Fuse BOOT_CFG2[3:0] |
SRC_SBMR1[7:0] SRC_SBMR1[11:8] |
通過調試器獲取這兩個寄存器的值非常簡單,如果是 J-LINK,只需要連上之後使用 mem32 命令讀取即可(註意 RT10xx 上的 SRC_SBMR1/2 地址分別是 0x400F8004/0x400F801C,但是 RT1160/1170 上是 0x40C04008/0x40C0401C)。
知道了啟動配置檢查方法,現在痞子衡告訴你這麼做的意義,主要有以下兩點。其中第二點就是文章開頭那位開源社區大佬掉進坑裡的原因(關於 BT_FUSE_SEL 位的解釋詳見痞子衡舊文 《Boot配置(BOOT Pin/eFUSE)》 1.2 小節)。
- 意義一:有時候因為上電採樣時序或者設定後僅軟複位原因,BOOT_MODE[1:0] 以及 BT_CFG[11:0] 引腳設定並沒有如期生效,所以需要通過 SRC_SBMR2 來確認。
- 意義二:Fuse BT_FUSE_SEL 位在不同 BOOT_MODE[1:0] 下作用不同,這會影響啟動設備 BOOT_CFG 最終設定(有時候是 BT_CFG[11:0] 引腳生效,有時候是 Fuse BOOT_CFG1/2 值生效),所以需要通過 SRC_SBMR1 來確認。
至此,SRC_SBMRx寄存器對於定位i.MXRT1xxx離線無法啟動問題的意義痞子衡便介紹完畢了,掌聲在哪裡~~~
歡迎訂閱
文章會同時發佈到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下麵二維碼,就可以在手機上第一時間看了哦。
最後歡迎關註痞子衡個人微信公眾號【痞子衡嵌入式】,一個專註嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
![痞子衡嵌入式-微信二維碼](https://img2022.cnblogs.com/blog/623659/202211/623659-20221116165755872-427238307.jpg)
![痞子衡嵌入式-微信收款二維碼](http://henjay724.com/image/cnblogs/baogeMcu_payment_wechat_150x150.png)
![痞子衡嵌入式-支付寶收款二維碼](http://henjay724.com/image/cnblogs/baogeMcu_payment_alipay_150x150.jpg)
衡傑(痞子衡),目前就職於某全球頂級半導體原廠MCU系統部門,擔任高級嵌入式系統應用工程師。
專欄內所有文章的轉載請註明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關註痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關於專欄文章有任何疑問請直接在博客下麵留言,痞子衡會及時回覆免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。