S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加強大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整體上來講,S5PV210的Nand flash配置還是非常簡單的。
其實,配置一個模塊往往需要以下幾個步驟:
(1)根據原理圖,理清模塊的接線方式,對于Nand flash來說,就是看看Nand flash接到了哪些GPIO上,然后把對應的GPIO配置為Nand功能即可。
(2)閱讀S5PV210手冊,掌握相關模塊控制器的功能、操作方式及寄存器配置。
(3)閱讀模塊芯片手冊,掌握模塊的訪問控制時序。
我們按照以上步驟進行配置,首先是模塊GPIO的配置,我的開發板是TQ210,Nand flash芯片是K9K8G08U0B,接線方式如下圖
其中:
(1)Xm0FRnB0~Xm0FRnB3,Xm0FCLE,Xm0FALE,Xm0FWEn,Xm0FREn這八根腳連接到了MP0_3上,查看MP0_3控制寄存器可知,需將MP0_3CON配置為0x22222222;
(2)Xm0CSn2~Xm0CSn5四根腳連接到了MP0_1的2~5腳上,故MP0_1CON的8~23位應該配置為0x3333;
(3)Xm0DATA0~Xm0DATA7這八根腳連接到了MP0_6上,故MP0_6應該配置為0x22222222;
這樣,GPIO配置好了,接下來我們配置下Nand flash的控制寄存器,大體瀏覽下Nand flash的寄存器功能后我們可以發現,如果不使用ECC功能可以只配置NFCONF和NFCONT兩個寄存器,我們的Nand flash是SLC型Nand,Page大小為2048,寫入地址需要5個周期(這些從Nand flash芯片手冊上很容易找到),故NFCONF應該配置如下:
NFCONF=(3<<23)|(1<<12)|(2<<8)|(0<<4)|(1<<1); //依次為:禁止ECC,TACLS,TWPRH0,TWPRH1,SLC、2K、5周期。
其中TACLS、TWPRH0和TWPRH1需要閱讀手冊來確定,韋東山老師講述了確定方式,但是,我配置時完全按照手冊上的最小時間設置時沒有能夠正常訪問,我是自己嘗試出來的,先將三個參數都設置為7,然后慢慢減小,最后測試出來設置為1、2、0,但是這樣不一定是最穩定的,一般來講,數值略大一些會更穩定,但是為了不影響訪問效率,這個值也不能設太大,先按照最小情況設置,當發現有讀取錯誤或其他不穩定現象時再適當提高參數值。
然后就是NFCONT寄存器,NFCONT的配置就更簡單了,我們不設置ECC,只需要設置0位和1位就可以了:
NFCONT = (1<<1)|(1<<0);//禁止片選,使能Nand
這樣,Nand flash的初始化函數就出來了:
void nand_init(){
NFCONF = (3<<23)|(1<<12)|(2<<8)|(0<<4)|(1<<1);
NFCONT = (1<<0)|(1<<1);
MP0_1CON &= ~(0xffff<<8);
MP0_1CON |= 0x3333<<8;
MP0_3CON = 0x22222222;
MP0_6CON = 0x22222222;
nand_reset();
}
至于nand_reset,通常是Nand flash配置完成之后就進行一次reset,這樣使Nand flash恢復到最初狀態。
這樣,Nand flash初始化好了,但是要訪問Nand flash還需要按照時序對其操作,Nand方式啟動時只需要實現Nand flash的讀操作,為此,這里只列舉一下幾個讀相關的操作:
(1)Nand flash reset
static void nand_reset(){
nand_select_chip();
nand_cmd(0xff);
nand_wait();
nand_deselect_chip();
}
(2)Nand flash寫地址
static void nand_addr(unsigned long page_addr, unsigned long page_offset){
NFADDR = (page_offset>>0) & 0xFF;
NFADDR = (page_offset>>8) & 0x7;
NFADDR = (page_addr) & 0xFF;
NFADDR = (page_addr>>8) & 0xFF;
NFADDR = (page_addr>>16) & 0x07;
}
(3)Nand flash讀ID
void nand_read_id(char id[]){
int i;
nand_select_chip();
nand_cmd(0x90);
NFADDR = 0;
for (i = 0; i < 5; i++)
id[i] = nand_read();
nand_deselect_chip();
}
(4)Nand flash讀頁數據
void nand_read_page(unsigned char* buf, unsigned long page_addr){
int i;
nand_select_chip();
nand_cmd(0);
nand_addr(page_addr, 0);
nand_cmd(0x30);
nand_wait();
for(i = 0; i != PAGE_SIZE; ++i){
*buf++ = nand_read();
}
nand_deselect_chip();
}
上面是幾個比較重要的Nand flash讀相關的操作函數,到這里,您自己補充一下引用到的小函數就可以正常的進行Nand flash操作了,我把我寫的代碼上傳到我的CSDN資源里,如果需要的話可以拿去參考。另外,如果需要編寫Nand flash寫操作的代碼可以參考一下本人博客中6410的Nand flash配置部分和Nand flash的芯片手冊,原理都是相通的。
上一篇:ARM-Linux啟動方式
下一篇:ARM-Linux開發與MCU開發的區別
推薦閱讀
史海拾趣
Forge Europa Ltd公司深知可持續發展對于企業和行業的重要性。因此,公司在生產過程中始終堅持綠色、環保的理念,致力于減少能源消耗和環境污染。公司采用了先進的生產技術和設備,提高了生產效率和資源利用率,同時加強了廢棄物的處理和回收工作。此外,Forge Europa還積極參與各類環保活動,倡導綠色消費和低碳生活,為行業樹立了可持續發展的典范。
Futaba Electric最初起源于收音機收訊真空管的制造,但在1970年,公司做出了重大的戰略調整,決定結束真空管業務,專注于螢光表示管(VFD)的生產。這一決策標志著公司從傳統電子元件向高級顯示技術的轉型。隨著VFD技術的不斷發展,Futaba憑借其在清晰度、視角和亮度方面的卓越表現,逐漸在全球VFD市場中占據領先地位,目前市場份額超過60%。這一轉型不僅使Futaba成為VFD技術的領導者,還為其在汽車儀表盤和抬頭顯示器等領域的廣泛應用奠定了基礎。
進入21世紀,隨著全球電子產業的快速發展,三禮公司看到了中國內地市場的巨大潛力。2006年,公司決定擴大在中國內地的生產規模,投資建構了40,000平方米的廠房,并成立了專業客制化產品廠——和瑞電子(3LQ)。這一舉措不僅提升了公司的生產能力,還使得產品更加符合市場需求,進一步鞏固了公司的市場地位。
CAMBION公司自成立以來,始終將技術創新作為核心驅動力。在早期,公司研發團隊成功開發了一款具有革命性的芯片技術,顯著提升了電子設備的處理速度和能效。這一技術迅速在行業內引起關注,為CAMBION贏得了大量訂單和合作伙伴。隨著技術的不斷完善和應用范圍的擴大,CAMBION逐漸在電子行業中嶄露頭角。
面對日益激烈的市場競爭和不斷變化的市場需求,德旭電子深知只有不斷創新才能在競爭中立于不敗之地。因此,公司始終堅持技術創新和產業升級的戰略方向。
德旭電子在產品研發方面不斷投入大量人力物力,積極引進國內外先進技術和管理經驗。同時,公司還加強與高校、科研機構的合作與交流,共同開展技術研發和人才培養工作。這些舉措使得德旭電子在技術創新方面取得了顯著成果,不斷推出具有市場競爭力的新產品和新技術。
隨著公司規模的不斷擴大和業務范圍的不斷拓展,德旭電子開始注重履行社會責任和推動可持續發展。公司積極參與公益事業和社會活動回饋社會。
在環保方面德旭電子堅持綠色生產和低碳發展理念積極推廣環保技術和設備降低生產過程中的能耗和排放。同時公司還注重產品的環保性能研發和生產符合環保標準的產品滿足客戶的環保需求。
在社會責任方面德旭電子關注員工福利和職業發展為員工提供良好的工作環境和培訓機會促進員工的成長和發展。此外公司還積極參與社會公益事業和慈善活動為社會做出積極貢獻。
通過這些舉措德旭電子在履行社會責任和推動可持續發展方面取得了顯著成效贏得了社會的廣泛認可和贊譽。
我現在需要將函數分為對內存訪問量大和對內存訪問量小的二類,可以從函數的軟件實現或硬件實現來分析 現在要給出分類方法以及評價體系,希望大家能給點建議噢 謝謝… 查看全部問答∨ |
|
小弟剛大三. 專科. 模電數電只會一點點.在LINUX下C開發. 有系統和網絡編程經驗. 想轉到嵌入式. 小弟想買一套設備. 2500以下的. 可以做實驗. 請大家做個好心為小弟說說. thanks… 查看全部問答∨ |
void __fastcall TProtocolWinCE::DumpPhoneContact() { m_progress->OnShowMessage("讀取手機通訊錄..."); IRAPIStream *pStream; DWORD dwOut; ...… 查看全部問答∨ |
上拉電阻: 1、當TTL電路驅動COMS電路時,如果TTL電路輸出的高電平低于COMS電路的最低高電平(一般為3.5V),這時就需要在TTL的輸出端接上拉電阻,以提高輸出高電平的值。 2、OC門電路必須加上拉電阻,才能使用。 3、為加大輸出引腳的驅動能力,有 ...… 查看全部問答∨ |
|
本帖最后由 SYW 于 2015-7-13 15:24 編輯 各位大神們,我又來問愚蠢的問題了! 這是一段網上找的例程,ADC程序: void ADC(void) { WDTCTL = WDTPW + WDTHOLD; &nb ...… 查看全部問答∨ |
本帖最后由 nt52241930 于 2016-3-15 17:04 編輯 請教各位, 看了手冊上,發現 使用SysCtlSleep(); 可以進入休眠的中斷向量, 但發現他進去後,依然可以執行main裡面的代碼??? 目前想要的功能為 進入休眠後,將所有外設關閉 並使用一個外部gpio ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- Linux系統編程篇丨迅為IMX6ULL-對應視頻講解
- 嵌入式學習丨4412開發板-uboot源碼-匯編-源碼分析(一)嵌入式學習丨4412開發板-uboot源碼-匯
- 迅為IMX6ULL開發板-主頻和時鐘配置例程(二)
- 迅為IMX6ULL開發板-主頻和時鐘配置例程
- 迅為IMX6ULL開發板安裝VMware Tool工具
- i.MX6ULL終結者Debian文件系統的構建i.MX6ULL 移植Debian文件系統
- 迅為i.MX6ULL開發板按鍵例程編譯及運行
- 迅為-i.MX6開發板手冊更新-非設備樹uboot-修改默認環境變量
- 迅為-IMX6ULL-QT應用_在開發板上移植ssh
- 迅為-i.MX6ULL開發板-QT實戰項目DHT11&網絡編程實戰練習(一)
- 不可錯過的一次邂逅,TTI攜TE傳感器樣片與你相見!免費樣片申請活動開始啦~
- 搶先體驗:恩智浦最新LPC1500開發板,速來!
- 有獎直播|魏德米勒 OMNIMATE® 聯接技術的創新發展
- 【中秋佳節話中秋】吃吃月餅聊聊天,還有搶樓好禮送給你!
- 理想中的開發板、萬用表,好用不貴? e絡盟11.11搶購,給你機會!
- 夏末秋初,玩轉EE芯積分,邊賺邊花+禮品兌換劇透
- 三人行必有我師——EEworld網友原創教程隆重登場!
- 搶鮮體驗| 兩款GD RISC-V開發板
- Microchip 有獎直播|如何構建車載充電器
- 有獎直播預報名|TI 新一代Sitara™ AM62處理器革新人機交互——加速邊緣AI的開發