在拿到一塊空白板子時,我們的bootloader如何燒到FLASH上呢? 一個途徑就是通過模擬器,ARM有進階模擬器,進階貨是不錯,不過我們選擇窮人的方式,也是個模擬器,至於是啥,網上一搜一大堆,jlink, openjtag, usb...,東西很多,國內便宜(大家都知道)。按照標準,其實這些叫作適配器,反正就是一介面,連上去就好了,對了,是JTAG介面。
以前不懂的時候,以為接上就能燒了?誰來燒呀?CPU燒?燒什麼呀? 後來看了文檔才知道,這些CPU一般都有個偵錯模式,在偵錯模式下,CPU外面多了一層引腳,訊號都走這,與JTAG介面通訊,我們就可以通過JTAG介面,對CPU進行操作,可讀可寫。
如果我們想讀一個寄存器值,我們該發什麼訊號給CPU呢?這些都在CPU手冊上有,我要說的不是這個,我想說的是,前輩已經寫了軟體來做這些工作,需要啥訊號,我們就不用關心了,需要的只是傳個命令過去,比如 read addr之類的,這類軟體應該很多,我們又選擇了 OpenSource的 OpenOCD, 這個軟體還是不錯了,開發人員很勤奮,maillist天天都有很多郵件。 如果我們的CPU在該軟體的支援的範圍內,那麼我們需要做的事情就是寫寫設定檔,否則就需要寫些CPU支援的 c 代碼了。設定檔,主要部分配置CPU,FLASH BANK(地址寬度很重要)等,讓CPU能操作FLASH,也就是你得告訴CPU如何工作,其實就是設定寄存器。軟體運行起來,需要把CPU掛起,有時候會出現不能掛起的情況(有的是無緣無故,有的是由於reset時的訊號不太對,這點一直沒弄清楚,jtag訊號),暫停MMU,之後就可以燒啦。看著手冊大家都能燒。
bootloader燒好了,就可以啟動了,之後燒核心什麼的,似乎大家都是通過bootloader來做的,我也是。
BTW:燒錄FLASH,還有種 socket 方式,這種FLASH可拆卸,取下來,插到專門燒寫器裡,也可以完成燒錄。其他的方法我也沒總結過,也沒用過。