📄 at45db321.lst
字号:
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 + -