NOR FLASH 修改 在AT91RM9200上

2021-05-26 13:29:02 字數 2171 閱讀 5051

出處:

本文修改的基礎是nor flash晶元的更換,由原來intel 晶元e28f128換為s29gl128n,(該晶元是spansion公司的,被amd收購),晶元由以前的8m也變為16m,所以大體修改分兩個方面,一是uboot,一是linux核心。

一.uboot的修改

在uboot中由於換了新的flash晶元,uboot不一定支援,所以需要修改對他的識別:

(1)   修改在include/configs 下的at91rm9200dk.h檔案

在這個檔案頭中主要定義了兩個變數,一類是選項,字首為config_,用來選擇處理器,裝置介面,命令,屬性等,主要用來決定是否編譯某些檔案或者函式。一類是引數,字首是cfg_,用來定義匯流排頻率,串列埠波特率,flash位址引數等。這些常量引數主要用來支援通用目錄中的**,定義板子資源引數。

在該檔案中,我們主要改了以下兩項,主要是flash中的引數:

#define cfg_env_addr (phys_flash_1 + 0xfe0000) //環境變數的位址,參考在linux核心中的phymap.c函式中的分割槽來看,phys_flash_1為flash的起始位址。

#define cfg_env_size 0x20000 //每個扇區的大小,這裡晶元是128k,不同的晶元不同,參考晶元手冊。

有時需要設定flash的片數,一片還是兩片,在

#define      cfg_env_is_in_flash     1   中設定

u-boot的命令也是通過目標板的配置標頭檔案來配置的,比如要新增

ping命令,就必須新增

cfg_cmd_net和cfg_cmd_ping才行。不然common/cmd_net.c就不會被編譯了。

從這裡我可以這麼認為,u-boot工程可配置性和移植性可以分為兩層:

一是由makefile來實現,配置工程要包含的檔案和資料夾上,用什麼編譯器。

二是由目標板的配置標頭檔案來實現原始碼級的可配置性,通用性。主要使用的是#ifdef #else #endif 之類來實現的。

(2)  在linux/include flush.h 檔案

1增加晶元device ids

#define amd_id_gl128n_3  0x22012201 /* 3rd id word for s29gl128n */

2增加flash identification codes

#define flash_s29gl128n 0x00f1          /* spansion s29gl128n                */

3 增加manufacturer offsets

#define flash_man_amd     0x00000000 /* amd                               */

(3)在board/at91rm9200dk 下的flash.c 檔案

在這裡面有幾個部分需要改動,一是讀flash的各種資訊,如製造商id等,通過,flash_get_size();在乙個寫週期期中,往任意位址寫上0x90就可以了。

/* write auto select command sequence */

addr[flash_cycle1] = 0x00aa;       /* for amd, intel ignores this */

addr[flash_cycle2] = 0x0055; /* for amd, intel ignores this */

addr[flash_cycle1] = 0x0090; /* selects intel or amd */

二是設定保護區,把uboot,和環境變數的保護區。

三是寫和擦除函式,注意寫和擦出的操作就可以了。

AT91RM9200新增串列埠驅動

uart串列埠驅動程式移植 uart串列埠驅動程式移植 仇潔婷,陳儒軍 在嵌入式控制系統採集站的設計方案中,需要用到 at91rm9200的5 個uart 串列埠,就會涉及到多個中斷的優先順序分配問題,而且也可能造成序列通訊的中斷不能及時響應,從而造成資料丟失。在 linux2.6.21 核心中,u...

AT91RM9200 啟動過程詳解

最近,一直在做ramdisk,把arm linux的啟動過程完整的看了一遍,收穫不少,心想可以寫點原創了。考慮到網上的文件雖然有介紹arm linux的啟動過程的,但是一般沒有給出流程圖,也講的十分零星,沒有乙個全貌,我就主要以流程圖的方式給出,再一點一點的詳解每個過程,剛剛接觸嵌入式arm lin...

AT91RM9200的啟動過程

系統上電,檢測bms,選擇系統的啟動方式,如果bms為高電平,則系統從片內rom啟動。at91rm9200的rom上電後被對映到了0x0和0x100000處,在這兩個位址處都可以訪問到rom。由於9200的rom中固化了乙個bootloaer程式。所以pc從0x0處開始執行這個bootloaer 準...