⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at45db321.lst

📁 单片机对at45db021flash芯片的驱动源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 220   1      }
 221          //直接从存储空间读到外部缓冲区
 222          void MainMemPageRead(uint Page,uint InPageAdd,uchar *Buffer,uint Num)
 223          {
 224   1              uint i = 0;
 225   1              
 226   1              if(Page>8191)return;
 227   1              
 228   1              CS = 0;
 229   1              SPI_SendByte(MAIN_MEMORY_PAGE_READ);
 230   1              i = Page>>6;
 231   1              SPI_SendByte(i);
 232   1              i = Page&0x3f;
 233   1              i = i<<2;
 234   1              Page = InPageAdd>>8;
 235   1              Page += i;
 236   1              i = (uchar)Page;
 237   1              SPI_SendByte(i);
 238   1              SPI_SendByte((uchar)(InPageAdd&0xff));
 239   1              for(i=0;i<32;i++){SCK = 1;SCK = 0;}//dummy
 240   1              for(i=0;i<Num;i++)Buffer[i] = SPI_ReadByte();
 241   1              CS = 1;
C51 COMPILER V7.08   AT45DB321                                                             12/28/2007 17:00:32 PAGE 5   

 242   1      }
 243          //通过buffer1编程flash
 244          void MainMemoryPageProgramThroughBuffer(uint Page,uint InPageAdd,uchar *Buffer,uint Num)
 245          {
 246   1              uint i = 0;
 247   1              
 248   1              if(Page>8191)return;
 249   1              
 250   1              CS = 0;
 251   1              SPI_SendByte(MAIN_MEMORY_PAGE_WRITE_THROUGH_BUFFER1);
 252   1              i = Page>>6;
 253   1              SPI_SendByte(i);
 254   1              i = Page&0x3f;
 255   1              i = i<<2;
 256   1              Page = InPageAdd>>8;
 257   1              Page += i;
 258   1              i = (uchar)Page;
 259   1              SPI_SendByte(i);
 260   1              SPI_SendByte((uchar)(InPageAdd&0xff));
 261   1              for(i=0;i<Num;i++) SPI_SendByte(Buffer[i]);
 262   1              CS = 1;
 263   1              Delay(90);
 264   1      }
 265          //通过buffer1编程flash,同时内建擦除,不需要单独擦除指令
 266          void MainMemoryPageProgramThroughBufferAndErase(uint Page,uchar *Buffer)
 267          {
 268   1              uint i = 0;
 269   1              
 270   1              if(Page>8191)return;
 271   1              
 272   1              CS = 0;
 273   1              SPI_SendByte(MAIN_MEMORY_PAGE_WRITE_THROUGH_BUFFER1_ERASE);
 274   1              i = Page>>6;
 275   1              SPI_SendByte(i);
 276   1              i = Page&0x3f;
 277   1              i = i<<2;
 278   1              SPI_SendByte(i);
 279   1              i=0;
 280   1              SPI_SendByte(i);
 281   1              for(i=0;i<512;i++) SPI_SendByte(Buffer[i]);
 282   1              CS = 1;
 283   1              Delay(90);
 284   1      }
 285          
 286          uchar xdata buf[255];
 287          uchar xdata buf1[255];
 288          uchar idata flag=0;
 289          uint idata i;
 290          uchar idata c,a;
 291          uchar xdata *p _at_ 32767;
 292          
 293          void main(void) 
 294          {
 295   1              InitSys();
 296   1              SPI_Init();
 297   1              Delay(100);
 298   1              /*
 299   1              MainMemPageRead(8190,0,buf,512);//需要37ms@11.0592   18ms@22.1184
 300   1              Delay(100);
 301   1              PutStr(buf,512);
 302   1              while(1);
 303   1              */
C51 COMPILER V7.08   AT45DB321                                                             12/28/2007 17:00:32 PAGE 6   

 304   1              /*    ram test     */
 305   1              
 306   1              flag=0;
 307   1              p = 0;
 308   1              for(i=0;i<32000;i++)
 309   1              {
 310   2                      c=i%256;
 311   2                      *p=c;
 312   2                      _nop_();_nop_();_nop_();_nop_();
 313   2                      a = *p; 
 314   2                      p++;
 315   2                      if(a!=c){flag = 1;break;}
 316   2              }
 317   1              if(flag)
 318   1              {
 319   2                      PutStr("RAM TEST FALSE!\r\n",17);
 320   2                      Delay(200);
 321   2                      c = i/256;
 322   2                      a = i%256;
 323   2                      PutStr(&c,1);
 324   2                      PutStr(&a,1);
 325   2                      PutStr("\r\n",2);
 326   2                      Delay(200);
 327   2              }
 328   1              else PutStr("RAM TEST OK!\r\n",14);
 329   1              Delay(500);
 330   1              c=i/256;
 331   1              PutStr(&c,1);
 332   1              c=i%256;
 333   1              PutStr(&c,1);
 334   1              Delay(500);
 335   1              
 336   1              ReadDeviceId(buf1);
 337   1              if((buf1[0]==0x1f)&&(buf1[1]==0x27)&&(buf1[2]==0x01)&&(buf1[3]==0x00))PutStr("CheckDeviceIdOk\r\n",17);
 338   1              else PutStr("DeviceIdError\r\n",17);
 339   1              Delay(500);
 340   1              PutStr(buf1,4);
 341   1              Delay(500);
 342   1              
 343   1              for(i=0;i<256;i++)buf[i] = i;
 344   1              for(i=0;i<256;i++)buf1[i] = 0;
 345   1              
 346   1              
 347   1              
 348   1              PageErase(8191);
 349   1              
 350   1              PutStr("Program Flash Chip Page 8191\r\n",30);
 351   1              MainMemoryPageProgramThroughBuffer(8191,0,buf,255);//需要45ms@11.0592   20ms@22.1184
 352   1              
 353   1              Delay(500);
 354   1              PutStr("Flash Chip Read\r\n",17);
 355   1              MainMemPageRead(8191,0,buf1,255);//需要37ms@11.0592   18ms@22.1184
 356   1              
 357   1              Delay(500);
 358   1              PutStr(buf,255);
 359   1              Delay(500);
 360   1              PutStr(buf1,255);
 361   1              Delay(500);
 362   1              
 363   1              
 364   1              flag = 0;
 365   1              for(a=0;a<255;a++)
C51 COMPILER V7.08   AT45DB321                                                             12/28/2007 17:00:32 PAGE 7   

 366   1              {
 367   2                      if(buf[a]!=buf1[a])flag=1;
 368   2              }
 369   1              if(flag==0)PutStr("Check Flash Chip Ok\r\n",21);
 370   1              else PutStr("Check Flash Chip False\r\n",24);
 371   1              
 372   1              Delay(500);
 373   1              PutStr("Flash Chip Read\r\n",17);
 374   1              for(i=0;i<10;i++)
 375   1              {
 376   2                      Delay(500);
 377   2                      MainMemPageRead(i,0,buf1,255);
 378   2                      PutStr(buf1,255);
 379   2              }
 380   1              
 381   1              Delay(500);
 382   1              PutStr("erase Flash Chip Page 0--10\r\n",29);
 383   1              for(i=0;i<10;i++)
 384   1              {
 385   2                      PageErase(i);
 386   2                      //Delay(100);
 387   2              }
 388   1              
 389   1              Delay(500);
 390   1              PutStr("Read Flash Chip Page 0--10\r\n",28);
 391   1              for(i=0;i<10;i++)
 392   1              {
 393   2                      Delay(500);
 394   2                      MainMemPageRead(i,0,buf1,255);
 395   2                      PutStr(buf1,255);
 396   2                      PutStr("\r\n",2);
 397   2              }
 398   1              
 399   1              PutStr("erase Flash Chip Page 8000--8191\r\n",34);
 400   1              for(i=8000;i<8192;i++)
 401   1              {
 402   2                      PageErase(i);
 403   2              }
 404   1              
 405   1              PutStr("Flash Chip write Page 8000 -- 8191\r\n",36);
 406   1              for(i=8000;i<8192;i++)
 407   1              {
 408   2                      MainMemoryPageProgramThroughBuffer(i,0,buf,255);//需要45ms@11.0592   20ms@22.1184
 409   2              }
 410   1              
 411   1              Delay(50);
 412   1              PutStr("Flash Chip Read Page 8000 -- 8191\r\n",36);
 413   1              for(i=8000;i<8192;i++)
 414   1              {
 415   2                      Delay(100);
 416   2                      MainMemPageRead(i,0,buf1,255);
 417   2                      PutStr(buf1,255);
 418   2                      Delay(100);
 419   2                      PutStr("page",4);
 420   2                      
 421   2              }
 422   1      /*      
 423   1      */
 424   1              while(1);
 425   1      }
 426          
 427          
C51 COMPILER V7.08   AT45DB321                                                             12/28/2007 17:00:32 PAGE 8   

 428          
 429          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1987    ----
   CONSTANT SIZE    =    338    ----
   XDATA SIZE       =    510      35
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =      5    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -