說明:
根據物理結構上的區別 , NandFlash主要分為如下兩類:
1)?SLC (Single Level Cell): 單層式存儲
2)?MLC (Multi Level Cell): 多層式存儲
@:SLC在存儲格上只存一位數據, 而MLC則存放兩位數據。
1.nand.c
#define NFCONF (*(volatile unsigned long*)0x4E000000)
#define NFCONT (*(volatile unsigned long*)0x4E000004)
#define NFCMD (*(volatile unsigned char*)0x4E000008)
#define NFADDR (*(volatile unsigned char*)0x4E00000C)
#define NFDATA (*(volatile unsigned char*)0x4E000010)
#define NFSTAT (*(volatile unsigned char*)0x4E000020)
#define TACLS 1
#define TWRPH0 2
#define TWRPH1 1
void select_chip()
{
NFCONT &= ~(1<<1);
}
void deselect_chip()
{
NFCONT |= (1<<1);
}
void clear_RnB()
{
NFSTAT |= (1<<2);
}
void send_cmd(unsigned cmd)
{
NFCMD = cmd;
}
void send_addr(unsigned addr)
{
NFADDR = addr;
}
void wait_RnB()
{
while (!(NFSTAT&(1<<2)))
{
;
}
}
void nand_reset()
{
//選中flash
select_chip();
//清除RnB
clear_RnB();
//發送0xff命令
send_cmd(0xff);
//等待RnB
wait_RnB();
//取消選中flash
deselect_chip();
}
void nandflash_init()
{
//初始化NFCONF
NFCONF = (TACLS<<12) | (TWRPH0<<8) | (TWRPH1<<4);
//初始化NFCONT
NFCONT = (1<<0) | (1<<1);
//復位
nand_reset();
}
void NF_PageRead(unsigned long addr,unsigned char* buff)
{
int i;
//選中nandflash芯片
select_chip();
//清除RnB
clear_RnB();
//發送命令0x00
send_cmd(0x00);
//發送列地址
send_addr(0x00);
send_addr(0x00);
//發送行地址
send_addr(addr&0xff);
send_addr((addr>>8)&0xff);
send_addr((addr>>16)&0xff);
//發送命令0x30
send_cmd(0x30);
//等待RnB
wait_RnB();
//讀取數據
for(i=0;i<2048;i++)
{
buff[i] = NFDATA;
}
//取消選中nandflash芯片
deselect_chip();
}
void nand_to_ram(unsigned long start_addr, unsigned char* sdram_addr, int size)
{
int i;
for( i=(start_addr >>11); size>0;)
{
NF_PageRead(i,sdram_addr);
size -= 2048;
sdram_addr += 2048;
i++;
}
}
int NF_Erase(unsigned long addr)
{
int ret;
//選中flash芯片
select_chip();
//清除RnB
clear_RnB();
//發送命令0x60
send_cmd(0x60);
//發送行地址
send_addr(addr&0xff);
send_addr((addr>>8)&0xff);
send_addr((addr>>16)&0xff);
//發送命令D0
send_cmd(0xD0);
//等待RnB
wait_RnB();
//發送命令0x70
send_cmd(0x70);
//讀取擦除結果
ret = NFDATA;
//取消選中flash芯片
deselect_chip();
return ret;
}
int NF_WritePage(unsigned long addr,unsigned char *buff)
{
unsigned int i,ret = 0;
//選中nandflash
select_chip();
//清除RnB
clear_RnB();
//發送0x80命令
send_cmd(0x80);
//發送2個列地址
send_addr(0x00);
send_addr(0x00);
//發送3個行地址
send_addr(addr&0xff);
send_addr((addr>>8)&0xff);
send_addr((addr>>16)&0xff);
//發送數據
for(i=0;i<2048;i++)
{
NFDATA = buff[i];
}
//發送0x10命令
send_cmd(0x10);
//等待RnB
wait_RnB();
//發送0x70命令
send_cmd(0x70);
//讀取寫入結果
ret = NFDATA;
//關閉nandflash
deselect_chip();
return ret;
}
2.uart.c
#define GPHCON (*(volatile unsigned long*)0x56000070)
#define ULCON0 (*(volatile unsigned long*)0x50000000)
#define UCON0 (*(volatile unsigned long*)0x50000004)
#define UBRDIV0 (*(volatile unsigned long*)0x50000028)
#define UTRSTAT0 (*(volatile unsigned long*)0x50000010)
#define UTXH0 (*(volatile unsigned long*)0x50000020)
#define URXH0 (*(volatile unsigned long*)0x50000024)
#define PCLK 50000000
#define BAUD 115200
void uart_init()
{
//1.配置引腳功能
GPHCON &= ~(0xf<<4);
GPHCON |= (0xa<<4);
//2.1 設置數據格式
ULCON0 = 0b11;
//2.2 設置工作模式
UCON0 = 0b0101;
//3. 設置波特率
UBRDIV0 =(int)(PCLK/(BAUD*16)-1);
}
void putc(unsigned char ch)
{
while (!(UTRSTAT0 & (1<<1)));
UTXH0 = ch;
}
unsigned char getc(void)
{
unsigned char ret;
while (!(UTRSTAT0 & (1<<0)));
// 取數據
ret = URXH0;
if ( (ret == 0x0d) || (ret == 0x0a) )
{
putc(0x0d);
putc(0x0a);
}
else
putc(ret);
return ret;
}
上一篇:ARM-匯編指令集(總結)
下一篇:ARM詳細指令集
推薦閱讀
史海拾趣
為了進一步提升公司的競爭力,Aromat Corp開始實施國際化戰略。公司積極拓展海外市場,通過設立海外分支機構、與當地企業合作等方式,將產品推向全球。同時,Aromat Corp還加強了與國際同行的交流與合作,學習借鑒先進的經驗和技術,不斷提升自身的綜合實力。
在全球環保意識日益增強的背景下,Densitron公司積極響應環保號召,將綠色可持續發展作為公司的重要戰略之一。公司投入大量資源研發環保型產品和技術,減少生產過程中的能源消耗和污染排放。同時,公司還積極參與環保公益活動,推動整個行業的綠色發展。這些努力不僅提升了公司的社會形象,也為公司的可持續發展奠定了堅實基礎。
以上即為基于電子行業背景為Densitron公司虛構的5個發展故事。這些故事雖然并非基于真實事件,但反映了電子行業普遍關注的技術創新、市場拓展、行業變革、人才培養和綠色發展等關鍵要素。
在技術創新方面,中科芯不斷推出具有競爭力的新產品。其中,CKS32系列MCU是公司近年來推出的一款高性能微控制器產品。該產品具有高可靠性、高兼容性和高性價比的特點,在市場上廣受好評。在蘇州先進技術成果交易大會上,CKS32系列MCU以其卓越的性能和廣泛的應用領域吸引了眾多關注。該產品的推出不僅提升了中科芯在微控制器領域的市場地位,也為中國電子行業的發展注入了新的活力。
為了進一步擴大市場份額和拓展應用領域,Atmel(Microchip)積極與其他企業開展合作。公司與多家知名企業建立了戰略合作關系,共同推動微控制器及相關技術在各個領域的應用。通過與合作伙伴的緊密合作,Atmel的產品已經廣泛應用于工業、消費、安全、通信、計算和汽車等多個領域,為這些領域的發展提供了強有力的支持。
這五個故事旨在展現Atmel(Microchip)在電子行業中的發展歷程和成就,涵蓋了從創業初期到被收購后的不同階段。通過這些故事,我們可以看到Atmel(Microchip)如何憑借技術創新、市場拓展和合作發展,逐漸成為了微控制器領域的領軍企業。
隨著公司產品的逐漸推廣,肯尼威面臨著日益激烈的市場競爭。李明深知,要想在競爭中脫穎而出,必須走品質之路。他引入了國際先進的質量管理體系,率先在同行業中通過ISO9001認證。這一舉措不僅提高了產品質量,也提升了公司的品牌形象。同時,公司還建立了嚴格的品質檢測流程,確保每一件產品都符合高標準的品質要求。
為了更好地服務全球客戶,GAIA蓋亞電源積極實施全球化戰略,在全球范圍內設立了25個分支機構,形成了覆蓋廣泛的銷售和技術支持網絡。這些分支機構不僅負責當地市場的開拓和維護,還為客戶提供了及時、專業的技術支持和售后服務。通過本地化管理,GAIA蓋亞電源能夠更加靈活地應對不同地區的市場需求,進一步提升客戶滿意度和品牌影響力。
自動測試系統(ATS)廣泛應用于各類產品(器件、部件、電路板、設備或系統)從設計、生產到使用維護的各個階段,對提高產品性能及生產率,降低生產成本及整個生命周期成本,起著重要作用。對于飛機、導彈、艦船或武器系統,自動測試系統更是這些它 ...… 查看全部問答∨ |
在任何開關電源設計中,PCB板的物理設計都是最后一個環節,如果設計方法不當,PCB可能會輻射過多的電磁干擾,造成電源工作不穩定,以下針對各個步驟中所需注意的事項進行分析: 一、從原理圖到PCB的設計流程 建立元件參數->輸入原理網表->設計 ...… 查看全部問答∨ |
將下面代碼 轉成embedded vc++ 4.0環境下的代碼,我不懂c++,請高手幫個忙! #using <System.dll> #using <System.Windows.Forms.dll> using namespace System; using namespace System::Collections::Generic; void main() { ...… 查看全部問答∨ |
請推薦一些非PCI接口的MPEG編碼芯片,我找到一些型號,請評一下 1. SZ1510: SZ1510是一個 MPEG-1和運動JPEG圖像編碼器。其內置的視頻壓縮核經過優化,適合高效、實時的MPEG1數字圖像壓縮,具有功能多、功耗低、溫度范圍寬等特點;同時整合了TI公司的TMS320C54X高性能DSP內核,可依據MPEG-1標準對音 ...… 查看全部問答∨ |
請問:用Cypress CY7C68013A單片機與 Xilinx spartan 3E FPGA用I/O口相連希望完成通信。那么在設計的時候,I/O口相接是否要接電阻?這個如何判斷?謝謝!… 查看全部問答∨ |
|
有木有用verilog語言做過視頻圖像色空間轉換從RGB 到YCbCr,有工程能否參考一下 有木有用verilog語言做過視頻圖像色空間轉換從RGB 到YCbCr,有工程能否參考一下。。。急啊… 查看全部問答∨ |
|
WEBENCH設計大賽上傳數量排行榜(截止至7月11日下午4:30) 我們看看哪些網友離平板電腦、微單、電子書、固態硬盤或者移動硬盤這些大獎越來越近了呢?(截止到7月11日下午4點30的數據) 如果你也想獲得下列獎品,那也趕緊提交設計吧!活動詳情:http://bbs.eeworld.com.cn/TI/201307_webench/index.html … 查看全部問答∨ |
本系統原本使用Microchip平臺,現在要將平臺轉換為STM,由於時間緊迫,在此尋求神人幫忙,麻煩有專精於此且有意承包或有意進行交流討論的先進們與我聯繫,謝謝 信箱: nyk9282@yahoo.com … 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析