ARM Cortex-M內核中ROM table的使用


今天在博客園上注冊一個賬號,打算往后好好寫技術博客,原來在新浪上寫過幾篇,不過距離上一次寫是好幾個月前的事情了。

突然開始做一件事情,總是有點各種各樣的緣由。一條路總有分岔的地方,或者你打算自己在路上開辟一條岔道。選擇走哪條岔路也好,自己開辟一條岔道也好,如果對自己負責,似乎都需要停下來,主動搜集一下各種信息,聽聽其他人的看法,然后再決定以何種方式前進。幸好有些人願意和你分享自己的看法,幸好現在搜集信息不算困難,幸好無論哪種選擇都會有人支持你。


 

ROM table是ARM 系列soc必須有的一個組件,用來識別調試組件,關於它的中文資料比較少,我主要看的就是這兩篇:1.ARM CORTEX M系列中ROM TABLE原理分析。2.rom table。第一篇對我理解ROM table幫助很大。

讀取ROM表,確定系統可用調試組件實現流程

讀取SWD-AP寄存器中偏移地址是0XF8的寄存器,讀到的值為ADD,如果ADD[0]為1,則說明ADD[31:12]表明了ROM表的基地址

獲得ROM表的基地址后可以按順序讀取ROM表(大小為4K)中的數據,每個ROM表最多有960個entry,entry的格式如圖1

圖1

按順序讀取每個entry,讀到的值為value1,value2 , ……,valuen 。Value[31:12]是組件的偏移地址,value[0]表明組件是否存在,value=0x00000000是ROM表結束,表示后面沒有其他entry。

ROM表的entry讀完后,還要讀取ROM表最后的PID和CID,CID1[7:4]=0x1表明當前是ROM表,如果是調試組件,其值為0xe。PID和CID在ROM table中的偏移如下圖2紅框所示.然后根據從ROM表得到的信息(每個entry解析出來的信息),也就是每個入口指向的地址(每個4K塊開頭的地址,分別對應不同的調試組件),然后讀4K塊最后一片區域的PID,CID,根據PID,CID的值提取該調試組件的有關信息,確定該組件是否存在和可用。

圖2


 

如果只是針對Cortex-M0核,讀取ROM表並通過ROM表信息判斷調試組件是否存在是相對比較簡單的,點擊這里,搜索“DWT M0”,點開搜索結果的第四個,里面的超鏈接有關於Cortex-M0內核ROM表內容的說明,包括每個組件的的識別即對應PID,CID的值是什么。Cortex-m0+在搜索結果的第六條

以上就是使用ROM表確定系統可用組件過程。


先寫這樣,后面會繼續在這篇博客里補充細節,包括官方資料的下載鏈接。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM