当前位置:   article > 正文

zynq读写SD卡_zynq读取sd卡txt文件

zynq读取sd卡txt文件

zynq读写SD卡实验
SD卡有三种类型:
    SD:使用SD1.0协议,容量等级小于2GB,支持文件系统为FAT12,FAT16;
    SDHC(高容量安全数字卡):使用SD2.0协议,容量等级为2G到32GB,支持文件系统FAT32;
    SDXC(容量扩大化的安全存储卡):使用SD3.0协议,容量等级为32GB到2TB,支持文件系统为exFAT;
不同协议的SD卡有着不同表示写入速度等级的表示方法。
         SD1.0:使用X表示;
         SD2.0:用CLASS 表示,如CLASS2,后面的数字表示多少MB每秒;
         SD3.0:使用UHS表示,标志1表示10MB每秒。
SD可工作于SDIO模式或者SPI模式,具体可百度
除标准SD卡,还有TF卡(Micro SD),手机用的便是。
        ZYNQ 中的 SD 卡控制器符合 SD2.0 协议规范,接口兼容 eMMC、MMC3.31、SDIO2.0、SD2.0、SPI,支持 SDHC、SDHS 器件。SD 卡控制器支持 SDMA(单操作 DMA)、ADMA1(4K 边界限制 DMA)和ADMA2(在 32 位系统中允许任何位置和任意大小)。ARM 处理器通过 AHB 总线访问 SD 卡控制器,SD控制器采用读和写通道各自双缓冲 FIFO 的机制提高吞吐带宽。
具体操作过程:        

        本次实验在 ZYNQ 嵌入式最小系统的基础上,添加了 SD 卡控制器,用于驱动 TF 卡。需要说明的是,TF 卡连接的是 PS 的 MIO 端口,需要注意的是,TF 卡的引脚连接到 ZYNQ 的 Bank 1 端口(BANK501),Bank 1 的 IO 电压为 1.8V,因此在 MIO 的配置界面将 Bank1 的电压改为“LVCMOS 1.8V”。勾选了 CD 信号,CD 信号用于指示当前开发板有没有连接 TF 卡,这里勾选中 CD 信号,并将引脚分配至 MIO 10。

        在菜单栏中选择 File->New->Application Project,新建一个 SDK 应用工程。
在弹出的界面中工程名命名为 micro_sd_rw,点击“NEXT”,选择“Empty Application”,点击“Finish”按钮完成 SDK 应用工程的创建。
        接下来添加 FATFS 库。右击 micro_sd_rw_bsp,选择“Board Support Package Setting”。在弹出的界面中勾选“xilffs”,勾选后,会在左侧 Overview 的 standalone 一栏出现 xilffs,点击 xilffs。可以看到 use_lfn 的默认设置为
false,即不使能。use_lfn 用于设置是否使能长文件名以及文件名的小写字母,这里将 use_lfn 设置为 true,点击“OK”按钮完成设置。

  1. #include "xil_printf.h"
  2. #include "xparameters.h"
  3. #include "ff.h"
  4. #include "xdevcfg.h"
  5. static FATFS fatfs; //文件系统
  6. const char src_str[30] = "time is money"; //定义文本内容
  7. #define FILE_NAME "start.txt" //定义文件名
  8. //初始化文件系统
  9. int platform_init_fs()
  10. {
  11. FRESULT status;
  12. TCHAR* path = "0:/";
  13. BYTE work[FF_MAX_SS]; //工作区域
  14. //注册一个工作区(挂载分区文件系统),在使用任何其他文件函数之前,必须使用f_mount为每个使用卷分配一个工作区
  15. status = f_mount(&fatfs, path, 1); //挂载 SD 卡
  16. if(status != FR_OK)
  17. {
  18. xil_printf("Volume is not FAT formated; formating FAT\r\n");
  19. //格式化SD卡
  20. status = f_mkfs(path, FM_FAT32,0, work, sizeof work);
  21. if (status != FR_OK)
  22. {
  23. xil_printf("Unable to format FATfs\r\n");
  24. return -1;
  25. }
  26. //格式化之后,重新挂载 SD 卡
  27. status = f_mount(&fatfs, path, 1);
  28. if (status != FR_OK) {
  29. xil_printf("Unable to mount FATfs\r\n");
  30. return -1;
  31. }
  32. }
  33. return 0;
  34. }
  35. //挂载 SD(TF)卡
  36. int sd_mount()
  37. {
  38. int status;
  39. //初始化文件系统(挂载SD卡,如果挂载不成功,则格式化SD卡)
  40. status = platform_init_fs();
  41. if(status)
  42. {
  43. xil_printf("error: f_mont returned %d!\n",status);
  44. return XST_FAILURE;
  45. }
  46. return XST_SUCCESS;
  47. }
  48. //SD 卡写数据
  49. int sd_write_data(char *file_name,u32 src_addr,u32 byte_len)
  50. {
  51. FIL fil; /* File object */
  52. UINT bw; //f_write 函数返回已写入的字节数
  53. //打开一个文件,如果不存在,就创建一个新文件
  54. f_open(&fil, file_name, FA_CREATE_ALWAYS|FA_WRITE);
  55. //移动打开的文件对象的文件读/写指针 0:指向文件开头
  56. f_lseek(&fil,0);
  57. //写入数据
  58. f_write (&fil, (void*)src_addr,byte_len,&bw);
  59. //关闭文件
  60. f_close(&fil);
  61. return 0;
  62. }
  63. //SD 卡读数据
  64. int sd_read_data(char *file_name,u32 src_addr,u32 byte_len)
  65. {
  66. FIL fil; //文件对象
  67. UINT br; //f_read 函数返回已读出的字节数
  68. //打开一个只读的文件
  69. f_open(&fil,file_name,FA_READ);
  70. //移动打开的文件对象的文件读/写指针 0:指向文件开头
  71. f_lseek(&fil,0);
  72. //从 SD 卡中读出数据
  73. f_read(&fil,(void*)src_addr,byte_len,&br);
  74. //关闭文件
  75. f_close(&fil);
  76. return 0;
  77. }
  78. int main()
  79. {
  80. int status,len;
  81. char dest_str[30] = "";
  82. status = sd_mount(); //挂载 SD 卡
  83. if(status != XST_SUCCESS)
  84. {
  85. xil_printf("Failed to open SD card!\n");
  86. return 0;
  87. }
  88. else
  89. xil_printf("Success to open SD card!\n");
  90. len = strlen(src_str); //计算字符串长度
  91. sd_write_data(FILE_NAME,(u32)src_str,len); //写入数据
  92. sd_read_data(FILE_NAME,(u32)dest_str,len); //读取数据
  93. if(strcmp(src_str, dest_str) == 0)
  94. xil_printf("src_str is equal to dest_str,SD card test success!\n");
  95. else
  96. xil_printf("src_str is not equal to dest_str,SD card test failed!\n");
  97. return 0;
  98. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号