娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

S5PV210 NAND Flash

發布者:BlissfulMoon最新更新時間:2024-12-03 來源: cnblogs關鍵字:S5PV210  NAND  Flash  讀寫擦除 手機看文章 掃描二維碼
隨時隨地手機看文章

NAND Flash

關于NAND Flash
S5PV210的NAND Flash控制器有如下特點:
1) 支持512byte,2k,4k,8k的頁大小
2) 通過各種軟件模式來進行NAND Flash的讀寫擦除等
3) 8bit的總線
4) 支持SLC和MCL的NAND Flash
5) 支持1/4/8/12/16bit的ECC
6) 支持以字節/半字/字為單位訪問數據/ECC寄存器,以字為單位訪問其他寄存器。
注意:在此使用的Mini210S的NAND Flash類型為SLC,大小為1G,型號為K9K8G08U0A。所以本章的內容是針對SLC類型的NAND Flash(包括256M/512M/1GB等),并不適用MLC類型的NAND Flash。

程序例子:(完整代碼見鏈接)
代碼多了nand.c這個文件,里面包含了對NAND Flash的相關操作。
/*nand.c*/
<1> NAND Flash初始化函數nand_init(),代碼如下
void nand_init(void)
{
// 1. 配置NAND Flash
NFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<3)|(0<<2)|(1<<1)|(0<<0);
NFCONT =(0<<18)|(0<<17)|(0<<16)|(0<<10)|(0<<9)|(0<<8)|(0<<7)|(0<<6)|(0x3<<1)|(1<<0);
// 2. 配置引腳
MP0_1CON = 0x22333322;
MP0_2CON = 0x00002222;
MP0_3CON = 0x22222222;
// 3. 復位
nand_reset();
}
共3個步驟:
第一步 配置NAND Flash
主要是設置NFCONF和NFCONT兩個寄存器

image

NFCONF寄存器

AddrCycle = 1,When page size is 2K or 4K, 1 = 5 address cycle,Mini210S的NAND Flash的頁大小為2k,所有是5個地址周期;
PageSize = 0,When MLCFlash is 0, the value of PageSize is as follows: 0 = 2048 Bytes/page,Mini210S使用的是SLC NAND Flash且每頁大小為2k;
MLCFlash = 0,在此使用的是SLC NAND Flash;
TWRPH1/TWRPH0/TACLS是關于訪問時序的設置,需對照NAND Flash芯片手冊設置,這里不再詳細解釋,分別取TWRPH1=1,TWRPH0=4,TACLS=1;
ECCType0/MsgLength,我們的裸機代碼沒有使用到ECC,所有不用設置這兩個標志。

image

image

MODE = 1,使能NAND Flash控制器;
Reg_nCE0 = 1,取消片選,需要操作NAND Flash時再發片選;
Reg_nCE1 = 1, 取消片選,需要操作NAND Flash時再發片選;
InitMECC/InitSECC/SECCLock/MECCLock,我們的裸機代碼不涉及ECC,這4個標志位隨便設置即可;
RnB_TransMode = 0,Detect rising edge,RnB是NAND Flash的狀態探測引腳,我們使用上升沿觸發;
EnbRnBINT = 0 ,禁止RnB中斷;
EnbIllegalAccINT = 0,禁止Illegal access 中斷 ;
EnbMLCDecInt/EnbMLCEncInt為MCL相關,不用設置;
LOCK = 0,我們沒有用到Soft Lock,所以禁止Soft Lock;
LockTight = 0,我們沒有用到Lock-tight,所有禁止Lock-tight;
MLCEccDirection,MLC相關,可不用設置
第二步 配置引腳
用于NAND Flash相關功能;
第三步 復位
復位函數nand_reset的相關代碼如下:
static void nand_reset(void)
{
    nand_select_chip();
    nand_send_cmd(NAND_CMD_RES);
    nand_wait_idle();
    nand_deselect_chip();
}
NAND Flash的復位操作共4個步驟:
1) 發片選,實質就是NFCONT &= ~(1<<1);往NFCONT的bit[1]寫0;
2) 發命令復位命令NAND_CMD_RES (0xff);實質就是NFCMMD = cmd;將命令寫到NFCMMD寄存器;完整的NAND Flash命令信息見下圖:

image

3) 等待NAND Flash 就緒;實質就是while( !(NFSTAT & (BUSY<<4)) ),讀NFSTAT的bit[4]檢查NAND Flash是否就緒;
4) 取消片選,實質就是NFCONT |= (1<<1); 往NFCONT的bit[1]寫1;

<2> NAND Flash讀ID函數nand_read_id(),代碼如下
void nand_read_id(void)
{
nand_id_info nand_id;
// 1. 發片選
nand_select_chip();
// 2. 讀ID
nand_send_cmd(NAND_CMD_READ_ID);
nand_send_addr(0x00);
nand_wait_idle();
nand_id.IDm = nand_read();
nand_id.IDd = nand_read();
nand_id.ID3rd = nand_read();
nand_id.ID4th = nand_read();
nand_id.ID5th = nand_read();
printf('NANDFlash: makercode = %x,devicecode = %xrn',nand_id.IDm,nand_id.IDd);
nand_deselect_chip();
}

image

NAND Flash 讀ID操作

根據上圖,NAND Flash的讀ID操作共4個步驟:
第一步 發片選;
第二步 發讀ID命令NAND_CMD_READ_ID(0x90);
第三步 發地址0x00;調用函數nand_send_addr();
第四步 等待NAND Flash 就緒;
第五步 讀ID;調用了nand_read()函數,實質就是讀NFDATA寄存器;
下面解釋一下函數nand_send_addr(),核心代碼如下:
{
// 列地址,即頁內地址
col = addr % NAND_PAGE_SIZE;
// 行地址,即頁地址
row = addr / NAND_PAGE_SIZE;
// Column Address A0~A7
NFADDR = col & 0xff;
for(i=0; i<10; i++);
// Column Address A8~A11
NFADDR = (col >> 8) & 0x0f;
for(i=0; i<10; i++);
// Row Address A12~A19
NFADDR = row & 0xff;
for(i=0; i<10; i++);
// Row Address A20~A27
NFADDR = (row >> 8) & 0xff;
for(i=0; i<10; i++);
// Row Address A28~A30
NFADDR = (row >> 16) & 0xff;
for(i=0; i<10; i++);
}
首先根據頁大小來獲取頁地址和頁內偏移地址,然后通過5個周期將地址發送出去,實質就是寫NFADDR寄存器,具體每個周期如何發送,查閱NAND Flash芯片手冊可知,見下圖:

image

發送地址后,就可以連續讀出5個ID了,其中第一個是MAKDER CODE, 第二個是DEVICE CODE。

<3> NAND Flash擦除函數nand_erase(),核心代碼如下:
{
// 獲得row地址,即頁地址
unsigned long row = block_num * NAND_BLOCK_SIZE;
// 1. 發出片選信號
nand_select_chip();
// 2. 擦除:第一個周期發命令0x60,第二個周期發塊地址,第三個周期發命令0xd0 nand_send_cmd(NAND_CMD_BLOCK_ERASE_1st);
for(i=0; i<10; i++);
// Row Address A12~A19
NFADDR = row & 0xff;
for(i=0; i<10; i++);
// Row Address A20~A27
NFADDR = (row >> 8) & 0xff;
for(i=0; i<10; i++);
// Row Address A28~A30
NFADDR = (row >> 16) & 0xff;
NFSTAT = (NFSTAT)|(1<<4);
nand_send_cmd(NAND_CMD_BLOCK_ERASE_2st);
for(i=0; i<10; i++);
// 3. 等待就緒
nand_wait_idle();
// 4. 讀狀態
unsigned char status = read_nand_status();
}

image

根據上圖,NAND Flash的擦除操作共6個步驟:
第一步 發片選;
第二步 發擦除命令1 NAND_CMD_BLOCK_ERASE_1(0x60);
第三步 發頁地址,只需發頁地址;
第四步 發擦除命令2 NAND_CMD_BLOCK_ERASE_2st(0xD0);
第五步 等待NAND Flash就緒;
第六步 讀狀態,判斷擦除是否成功。若擦除失敗,則打印是壞塊再取消片選;否則直接直接取消片選即可。讀狀態調用了函數read_nand_status(),它的實質就是nand_send_cmd(NAND_CMD_READ_STATUS);ch = nand_read();先發讀狀態命令NAND_CMD_READ_STATUS,然后再讀狀態值。   

<4> NAND Flash讀函數copy_nand_to_sdram(),從NAND Flash中讀數據到DRAM,核心代碼如下:
{
// 1. 發出片選信號 nand_select_chip();
// 2. 從nand讀數據到sdram,第一周期發命令0x00,第二周期發地址nand_addr,第三個周期發命令0x30,可讀一頁(2k)的數據
while(length)
{
nand_send_cmd(NAND_CMD_READ_1st);
nand_send_addr(nand_addr);
NFSTAT = (NFSTAT)|(1<<4);
nand_send_cmd(NAND_CMD_READ_2st);
nand_wait_idle();
// 列地址,即頁內地址
unsigned long col = nand_addr % NAND_PAGE_SIZE;
i = col;
// 讀一頁數據,每次拷1byte,共拷2048次(2k),直到長度為length的數據拷貝完畢
for(; i{
*sdram_addr = nand_read();
sdram_addr++; nand_addr++;
}
}
// 3. 讀狀態
unsigned char status = read_nand_status();
}

image

NAND Flash 讀操作

根據上圖,NAND Flash的讀操作共7個步驟:
第一步 發片選;
第二步 發讀命令1 NAND_CMD_READ_1st(0x00);
第三步 發地址,調用函數nand_send_cmd(),發5個地址周期;
第四步 發讀命令2 NAND_CMD_READ_2st(0xD0);
第五步 等待NAND Flash就緒;
第六步 從頁內偏移地址開始讀,讀到頁結尾即結束,每次讀1byte;
第七步 讀狀態,判斷是否讀成功。

<5> NAND Flash寫函數copy_sdram_to_nand (),從DRAM寫數據到NAND Flash,核心代碼如下:
{
// 1. 發出片選信號
nand_select_chip();
// 2. 從sdram讀數據到nand,第一周期發命令0x80,第二周期發地址nand_addr,第三個周期寫一頁(2k)數據,第四周期發0x10
while(length)
{
nand_send_cmd(NAND_CMD_WRITE_PAGE_1st);
nand_send_addr(nand_addr);
// 列地址,即頁內地址
unsigned long col = nand_addr % NAND_PAGE_SIZE;
i = col;
// 寫一頁數據,每次拷1byte,共拷2048次(2k),直到長度為length的數據拷貝完畢
for(; i{
nand_write(*sdram_addr);
sdram_addr++;
nand_addr++;
}
NFSTAT = (NFSTAT)|(1<<4);
nand_send_cmd(NAND_CMD_WRITE_PAGE_2st);
nand_wait_idle();
}
// 3. 讀狀態
unsigned char status = read_nand_status();

}

image

根據上圖,NAND Flash的寫操作共7個步驟:
第一步 發片選;
第二步 發寫命令1 NAND_CMD_WRITE_PAGE_1st (0x80);
第三步 發地址地址,調用函數nand_send_cmd(),發5個地址周期;
第四步 發讀命令2 NAND_CMD_WRITE_PAGE_2st (0x10);
第五步 等待NAND Flash就緒;
第六步 從頁內偏移地址開始寫,讀到頁結尾即結束,每次寫1byte;
第七步 讀狀態,判斷是否讀成功。

2. main.c
在main.c中,首先會調用nand_init()來初始化NAND Flash,然后打印一個菜單,提供4種選擇測試NAND Flash:
讀ID功能(nand_read_id());
擦除功能(nand_erase());
讀功能(copy_nand_to_sdram());
寫功能(copy_sdram_to_nand());


關鍵字:S5PV210  NAND  Flash  讀寫擦除 引用地址:S5PV210 NAND Flash

上一篇:S5PV210串口
下一篇:S5PV210 PWM定時器

推薦閱讀最新更新時間:2025-04-19 06:41

TQ2440 學習筆記—— 7、NOR FlashNAND Flash
非易失閃速存儲器Flash 具有速度快、成本低、密度大的特點。 Flash 存儲器主要有 NOR Flash 和 NAND Flash兩種類型,總的來說, NOR 型比較適合存儲程序代碼,NAND 型則可用做大容量數據存儲。 1、NOR 型 Flash 存儲器 NOR Flash 技術是由Intel 公司于1988年首先開發,它的出現徹底改變了原先由EPROM和EEPROM一統天下的局面。 NOR 的特點是芯片內執行(XIP,eXecute In Place),這樣應用程序就可以直接在Flash 閃存內運行,不必再把代碼讀到系統的RAM中。NOR 的傳輸效率很高,但寫入速度與擦除速度很低。NOR Flash 就是一
[單片機]
NAND Flash成半導體行業2018年主戰場
國際半導體產業協會(SEMI)3日提出,繼移動裝置后,物聯網、車用、第五代移動通訊(5G )擴增實境(AR)/虛擬實境(VR)及人工智慧(AI)將為半導體產業中長期發展五大驅動力。為迎相關應用,存儲器廠積極擴增產能,并以儲存型(NAND Flash)為主要爭戰焦點。 SEMI表示,去年半導體產值創新高,主要是記憶體如DRAM和NAND Flash價格大漲,以及感測器、光電和分離式元件需求強勁帶動。預期這些應用今年仍會驅動產業成長。 此外,半導體設備產值也可望持續創高,主因存儲器和晶圓代工廠持續擴建。 SEMI表示,物聯網、 車用、5G、AR/VR及AI將是中長期發展五大驅動力。今年存儲器市場需求持續增加,DRAM位元需
[嵌入式]
HP發布SSD新品,采用3D NAND Flash優質顆粒
隨著IT硬件市場日趨成熟,核心配件的更替速度明顯減緩,但在存儲方面卻恰恰相反。作為限制整機性能最大的瓶頸,硬盤成為普通用戶和企業共同關注的焦點。如今, SSD 固態硬盤 顯然更為活躍,新技術、新品層出不窮。 ? 最近,來自 惠普 的兩款HP SSD新品全新上市,型號分別為HP SSD S700 PRO 和HP SSD S700。 ? 兩款新品同屬HP SSD SATA2.5寸系列,采用3D? NAND Flash 優質顆粒,以立體堆疊方式,大幅提升性能,并且可靠度和耐久度也明顯提升,是追求優異運算效能、暢玩大型游戲、專業設計編輯軟件操作及企業等不同用戶節省時間,提升效率的不錯選擇。 ? ? 其中S700 PRO產品讀取和寫入的
[嵌入式]
ARM 開發板 NAND FLASH空間不足解決方法
由于FL2440自帶128M 的NAND flash,而分給Linux文件系統的只有60M,由于系統中有許多庫文件,導致文件系統過大。 可以有兩種解決方案: 1、修改bootloader和內核源代碼中有關分區的信息,刪除Windows CE分區,重新編譯bootloader和內核,當然這樣比較麻煩可以參考 http://blog.csdn.net/ll_0520/archive/2010/12/25/6098565.aspx 這需要有心理準備,很可能會遇到很多麻煩,當然解決麻煩也是鍛煉動手能力的一個過程。 2、將文件系統中一些有關QT界面的庫文件如:/usr/lib目錄以NFS的形式掛載,這樣可以節省出20M的空間 具
[單片機]
Arm2440——Nand flash啟動模式詳解(LED程序為例)
斷斷續續的研究arm也有2個月了,現在才感覺理解了arm在Nand flash模式下的啟動過程,現在來這里記錄下來以表達我無比喜悅的心情。閑話少說,趁著還沒有忘記學習過程中的感受,直接進入正題。 大家都知道,arm在Nand flash啟動模式下啟動時系統會將Nand flash中的前4KB代碼拷貝到SRAM(也就是Steppingstone中),由SRAM配置中斷向量表和完成Nand flash訪問的必要初始化,然后將Nand flash中的全部程序代碼拷貝到SDRAM中,最后由SRAM跳轉到SDRAM,然后程序就正常執行了,這一過程看上去很簡單,但是真正理解這一過程還是不簡單的,盡管這樣,還是想告訴大家仔細理解還是比較容易理解這
[單片機]
NAND FLASH扇區管理
首先需要了解NAND FLASH的結構。如圖: 以鎂光MT29F4G08BxB Nand Flash為例,這款Flash(如上圖)以4個扇區(sector)組成1個頁(page),64個頁(page)組成1個塊(block),4096個塊(block)構成整個Flash存儲器;由于每個扇區的容量是512 字節(bytes),整個Flash容量為4224M Bit(相當于528M字節),去掉備用區域用于存放ECC數據校驗16M(虛線部分),就是這個片子的容量512M字節。其他型號的Flash也是同樣由扇區組成頁、由頁組成塊、塊組成整個存儲設備,只是扇區、頁、塊的數量多少有區別而已。 在Flash的生產制造過程中,由于生產
[單片機]
<font color='red'>NAND</font> <font color='red'>FLASH</font>扇區管理
3月價格大漲 Nand Flash概念股本季展望
??? 群聯(8299)董事長潘健成表示,智能型手機和平板計算機第二季進入出貨旺季,儲存型快閃存儲器(Nand Flash)需求轉強,將使Nand Flash第二季價格仍具支撐,甚至小漲。 ??? 不過,潘健成為,Nand Flash今年價格若仍維持在30%左右跌幅,會促使Nand Flash應用更快速成長,對相關廠商反而帶來更正面的助益。 ??? 根據集邦科技調查,3月Nand Flash合約價受到日本大地震影響,市場擔心短缺而搶貨,主流的MLC NAND Flash合約價上漲約達5%到15%不等。但3月下旬,部分TLC合約價,則有些供應商針對2X納米制程促銷呈現10%跌幅,吸引更多的存儲器卡廠商采購。 ??? 基本上,受到Nan
[手機便攜]
需求激增,全球NAND Flash明年將出現缺口
  隨著全球經濟可望在2010年復蘇,明年各種NANDFlash的終端應用產品的出貨量也將轉為成長;研究機構集邦科技(DRAMeXchange)表示,未來手機、SSD、記憶卡將內建更高容量NANDFlash,預估2010年全球NANDFlash將出現缺貨,需求的位產出將比今年增長81%,達到10,986MGB。   集邦科技預期,明年MP3記憶卡及UFD等的NANDFlash的傳統應用產品的內建容量也將會持續提高,新的應用領域也將為NANDFlash市場帶來新的成長動力,例如智能手機的出貨量將持續成長,且將搭配更高的NANDFlash內建容量,而供貨商也將更積極的推廣SSD在各種計算機相關的應用領域。   就NANDFlash
[半導體設計/制造]
需求激增,全球<font color='red'>NAND</font> <font color='red'>Flash</font>明年將出現缺口
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 江都市| 大田县| 仪征市| 吴江市| 阿拉善右旗| 万州区| 林州市| 佛学| 平安县| 乌拉特中旗| 涪陵区| 富蕴县| 获嘉县| 大新县| 娱乐| 纳雍县| 黎城县| 大余县| 澄迈县| 航空| 娱乐| 卢龙县| 寿光市| 深圳市| 山阳县| 呼伦贝尔市| 静乐县| 垦利县| 宜城市| 遵义县| 淳化县| 博客| 噶尔县| 时尚| 天长市| 长丰县| 安义县| 信阳市| 阳东县| 高要市| 盐边县|