×
单片机 > 单片机程序设计 > 详情

单片机软件SPI和硬件SPI读写SD卡,TF卡测试程序

发布时间:2023-10-10 发布时间:
|

软件SPI和硬件SPI读写SD卡,TF卡测试程序
SD卡模块和SD卡



软件SPI读写SD卡程序
测试平台:STC89C516和STC12C5A60S2
内存卡大小:128MB和2GB
晶振:均为12MHz

硬件SPI读写SD卡程序
测试平台:STC12C5A60S2
内存卡大小:128MB和2GB
晶振:12MHz
(89C52没有硬件SPI)


为了尽可能的不给后来者留坑,这些代码我在发出来之前反复测试过,确保无误,
还有就是关于SD卡程序的读写我在程序中写的很清楚,这里不再赘述

单片机源程序如下:

  1. #include "public.h"

  2. #include "SD.h"


  3. //测试平台:STC89C516和STC12C5A60S2

  4. //内存卡大小:128MB和2GB

  5. //晶振:均为12MHz


  6. void main()

  7. {

  8. unsigned int i;


  9. SD_init();//SD卡初始化


  10. for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;

  11. MCU_write_SD_512Byte(960,512);//MCU向SD卡写入数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))


  12. MCU_read_SD_512Byte(960,512);//MCU向SD卡读取数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))

  13. P0=BUFFER_DATA[0];


  14. while(1);

  15. }


  16. /*

  17. unsigned int i;


  18. SD_init();//SD卡初始化


  19. {

  20. 在使用SD卡模块前,先初始化SD卡

  21. }


  22. for(i=0;i<512;++i) BUFFER_DATA[i]=0x7F;

  23. MCU_write_SD_512Byte(960,512);//MCU向SD卡写入数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))


  24. {

  25. 将数据写入到SD卡:

  26. 先将数据写入到数据缓冲数组BUFFER_DATA中(这里的数据我全部都写0x7F),

  27. 然后运行MCU_write_SD_512Byte(960,512);

  28. 960为SD卡的扇区,表示将数据写入到SD卡的960扇区,512为一次性写入的数据大小,为512字节,建议填512字节,

  29. 因为1个扇区的大小为512字节

  30. }


  31. MCU_read_SD_512Byte(960,512);//MCU向SD卡读取数据,一次最多512字节(扇区,数据长度(最大为512,建议填512))

  32. P0=BUFFER_DATA[0];


  33. {

  34. 从SD卡读取数据:

  35. 先运行MCU_read_SD_512Byte(960,512);

  36. 这里的960为你要读的SD扇区,512位一次性读取的数据大小,为512字节,建议填512字节,因为1个扇区的大小为512字节

  37. 完成后数据存放在数据缓冲数组BUFFER_DATA中


  38. 因为没有现象的话不好判断SD卡读写是否成功,所以把P0BUFFER_DATA[0]赋给P0,P0接LED灯,就可以看见现象了

  39. }


  40. {

  41. 注意:将程序下载到开发板后可能会出现P0口显示的数据和SD卡写入数据不一致的情况

  42. 这时,

  43. 要将开发板和SD卡模块断电

  44. 要将开发板和SD卡模块断电

  45. 要将开发板和SD卡模块断电

  46. 不是复位

  47. 不是复位

  48. 不是复位

  49. 将开发板断电后再上电,就可以看见现象了

  50. 如果还不成功,

  51. 检查连线是否正确

  52. 检查连线是否正确

  53. 检查连线是否正确

  54. 或尝试插拔SD卡


  55. SD卡读写成功后,可以修改扇区和SD的写入数据多实验几次,确保万无一失

  56. }

  57. */


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法