at91rm9200啟動機制簡析
本文以h9200m開發板為例,簡單分析一下at91rm9200處理器的啟動機制
一 h9200m開發板簡介
at91rm9200晶元的pa31/bms引腳的電平高低來決定選擇哪種啟動模式
at91rm9200 : atmel 公司生產的基於arm9核的soc處理器.
以下先給出at91rm9200引導流程圖
boot program flow diagram
device setup||
boot spi dataflash boot --> download from dataflash --> run||
twi eeprom boot --> download from eeprom --> run||
parallel boot --> download from 8-bit device -->
| | xmodem protocol
| |---dbgu serial download ---------------------> run
|____|
| dfu protocol
|-----usb download -----------------------> run
at91rm9200內部固化的**在設計上採用了物件導向的設計方法,如下:
typedef struct _at91s_service
at91s_service, *at91ps_service;
char at91f_mainmethod()
char at91f_childmethod()
//使用方法如下
at91s_service service;
at91ps_service pservice = at91f_opendevice(&service);
pservice->at91f_mainmethmod();
.....
通過如上**片斷可以看出它採用了類似物件導向的設計方法。
其實如果各位朋友接觸過的話或者看過這本書的話,應該很容易便接受它。
下面以xmodem服務為例子介紹:
at91rm9200內部提供的服務包含了幾個服務物件, 這些物件在片內啟動xmodem協議host端和targe端通訊時會用到.
typedef struct _at91s_romboot
at91s_romboot;
//at91s_pipe
typedef struct _at91s_pipe
at91s_pipe;
//at91s_buff
typedef struct _at91s_sbuffer
at91s_sbuffer;
// at91s_svctempo
typedef struct _at91s_svctempo
at91s_svctempo;
// at91s_ctrltempo
typedef struct _at91s_ctltempo
at91s_ctltempo;
at91s_romboot const *pat91;
at91s_sbuffer sxmbuffer;
at91s_svcxmodem svcxmodem;
at91s_pipe xmodempipe;
at91s_ctltempo ctltempo;
at91ps_buffer pxmbuffer;
at91ps_svccomm psvcxmodem;
unsigned int sizedownloaded;
/* init of rom services structure */
pat91 = at91c_rom_boot_address;//這裡取得內部rom服務的入口位址
/* tempo initialization */
pat91->openctltempo(&ctltempo, (void *) &(pat91->systimer_desc));
ctltempo.ctltempostart((void *) &(pat91->systimer_desc));
/* xmodem initialization */
pxmbuffer = pat91->opensbuffer(&sxmbuffer);
psvcxmodem = pat91->opensvcxmodem(&svcxmodem, (at91ps_usart)at91c_base_dbgu, &ctltempo);
pat91->openpipe(&xmodempipe, psvcxmodem, pxmbuffer);
xmodempipe.read(&xmodempipe, (char *)at91c_uboot_base_address, at91c_uboot_maxsize,
at91f_xmodemprotocol, 0);
while(xmodemcomplete !=1);
//上面部分主要針對at91rm9200片內啟動時我們可以使用的片內介面服務介紹,玩h9200的朋友可以參考一下便知道緣由。
AT91RM9200 啟動過程詳解
最近,一直在做ramdisk,把arm linux的啟動過程完整的看了一遍,收穫不少,心想可以寫點原創了。考慮到網上的文件雖然有介紹arm linux的啟動過程的,但是一般沒有給出流程圖,也講的十分零星,沒有乙個全貌,我就主要以流程圖的方式給出,再一點一點的詳解每個過程,剛剛接觸嵌入式arm lin...
AT91RM9200的啟動過程
系統上電,檢測bms,選擇系統的啟動方式,如果bms為高電平,則系統從片內rom啟動。at91rm9200的rom上電後被對映到了0x0和0x100000處,在這兩個位址處都可以訪問到rom。由於9200的rom中固化了乙個bootloaer程式。所以pc從0x0處開始執行這個bootloaer 準...
AT91RM9200新增串列埠驅動
uart串列埠驅動程式移植 uart串列埠驅動程式移植 仇潔婷,陳儒軍 在嵌入式控制系統採集站的設計方案中,需要用到 at91rm9200的5 個uart 串列埠,就會涉及到多個中斷的優先順序分配問題,而且也可能造成序列通訊的中斷不能及時響應,從而造成資料丟失。在 linux2.6.21 核心中,u...