NAND FLASH的读写程序.txt
上传用户:luntai
上传日期:2013-03-02
资源大小:1k
文件大小:3k
源码类别:

USB编程

开发平台:

C/C++

  1. NAND FLASH的读写程序(注意片选)
  2. 【浩惠电子 http://www.hheet.com/bbs 版权所有】 
  3. FLASH是K9F5608U0B,32M
  4. #include<INIT_REG.H>
  5. #define FLASH_MD1 0xeff0 //chip enable nand flash 1
  6. #define FLASH_MD2 0xfff0 //chip enable nand flash 2
  7. #define FLASH_MA1 0xeff2 //enable address nand flash 1
  8. #define FLASH_MA2 0xfff2 //enable address flash 2
  9. #define FLASH_MC1 0xeff1 //enable command nand flash 1
  10. #define FLASH_MC2 0xfff1 //enable command nand flash 2
  11. #define read_id 0x90
  12. void read_flash_id(void);
  13. void page_write_flash(unsigned char addrlow,addrmid,addrhigh);
  14. void read_flash(unsigned char addrlow,addrmid,addrhigh);
  15. void delay();
  16. void flash_reset();
  17. void main(void)
  18. {
  19.   unsigned char i=0,j=0;
  20.   init_snd1();     
  21.   flash_reset();
  22.   read_flash_id();
  23.   page_write_flash(0x0,0x0,0x0);
  24.   read_flash(0x0,0x0,0x0);
  25.   while(1);
  26. }
  27. void flash_reset()
  28. {
  29.   unsigned char xdata *xaddress;
  30.   xaddress=FLASH_MC1;
  31.   *xaddress=0xff;
  32.   delay();
  33.   
  34. }
  35. void read_flash_id(void) // 串口输出ID码
  36. {
  37.   unsigned char xdata *xaddress;
  38.   unsigned char x,y;
  39.   xaddress=FLASH_MC1;
  40.   *xaddress=read_id;
  41.   xaddress=FLASH_MA1;
  42.   *xaddress=0x00;
  43.   xaddress=FLASH_MD1;
  44.   x=*xaddress;
  45.   printf(x);
  46.   y=*xaddress;
  47.   printf(y);
  48. }
  49. void page_write_flash(unsigned char addrlow,addrmid,addrhigh)
  50. {
  51.   unsigned char xdata *buff;
  52.   unsigned char temp;
  53.   unsigned int i;
  54.   //erase flash block
  55.   buff=FLASH_MC1;
  56.   *buff=0x60;
  57.   buff=FLASH_MA1;
  58.   *buff=addrmid;
  59.   *buff=addrhigh;
  60.   buff=FLASH_MC1;
  61.   *buff=0xd0; 
  62.   delay();
  63.   do{
  64.   buff=FLASH_MC1;
  65.   *buff=0x70; 
  66.   buff=FLASH_MD1;
  67.   temp=*buff;
  68.   printf(temp);
  69.   temp=temp&0x01;
  70.   }
  71.   while(temp!=0x00);
  72.   //while(1);
  73.   //erase sucessfull
  74.   //write one page data
  75.   buff=FLASH_MC1;
  76.   *buff=0x80;
  77.   buff=FLASH_MA1;
  78.   *buff=addrlow;
  79.   *buff=addrmid;
  80.   *buff=addrhigh;
  81.   buff=FLASH_MD1;
  82.   for(i=0;i<512;i++)
  83.   {
  84.     
  85.     *buff=i;
  86.     printf(i);
  87.   }
  88.   buff=FLASH_MC1;
  89.   *buff=0x10; 
  90.   delay();
  91.   do{
  92.   buff=FLASH_MC1;
  93.   *buff=0x70; 
  94.   buff=FLASH_MD1;
  95.   temp=*buff;
  96.   printf(temp);
  97.   temp=temp&0x41;
  98.   }
  99.   while(temp!=0x40);
  100. }
  101. void read_flash(unsigned char addrlow,addrmid,addrhigh)
  102. {
  103.   unsigned char xdata *source;
  104.   unsigned int i,temp;
  105.   source=FLASH_MC1;
  106.   *source=0x00;
  107.   source=FLASH_MA1;
  108.   *source=addrlow;
  109.   *source=addrmid;
  110.   *source=addrhigh;
  111.   delay();
  112.   do{
  113.   source=FLASH_MC1;
  114.   *source=0x70; 
  115.   source=FLASH_MD1;
  116.   temp=*source;
  117.   printf(temp);
  118.   temp=temp&0x40;
  119.   }
  120.   while(temp!=0x40);
  121.   source=FLASH_MD1;
  122.   i=512;
  123.   while((i--)>0)
  124.   {
  125.   temp=*source;
  126.   printf(temp);
  127.   }
  128. }
  129. void delay()
  130. {
  131.   unsigned int temp;
  132.   for (temp=0; temp<3000;temp++) ;
  133. }