AT91RM9200啟動機制簡析

2021-04-30 14:55:14 字數 2652 閱讀 7066

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...