跳转到主要内容

zcu102(10)Standalone读写SD卡文件

demi 提交于

<font color="#FD8900">作者:bt(CSDN)</font>

本文在PS的Standalone程序中使用xilffs库实现对SD卡文件的读写操作。

本文主要参考以下两篇博客:
https://blog.csdn.net/jinhua1990/article/details/84100100
https://blog.csdn.net/lixiaolin126/article/details/83959214

本文配套源码已上传至
https://download.csdn.net/download/botao_li/10992054

<font style="line-height: 40px;"><strong>Block Design</strong></font>

建立zcu102的Vivado工程,新建Block Design,并且添加zynq模块

运行Run Block Automation,双击打开zynq模块配置查看SD接口配置

<center><img src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center>
<center><img src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

注意,CD指Card Detection,WP指Write Protection

参考ug1182,发现MIO39~MIO42的自动配置与之不符,而且SD接口协议并不存在8Bit的Data Transfer Mode

但是问题无解

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

保留UART和SD1,关闭其它外设接口以及PS-PL接口

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

保存后依次运行Generate Output Products和Create HDL Wrapper

在Flow Navigator中选择Generate Bitstream,完成后先Export Hardware,再Launch SDK

<font style="line-height: 40px;"><strong>PS程序</strong></font>

在SDK中建立Hello World模板程序,并新建BSP工程

<center><img src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center>
<center><img src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

接下来在BSP工程配置xilffs库

在BSP工程上,右键菜单选择Board Support Package Settings

<center><img src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

进入Settings窗口,在Overview界面选中xilffs库

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

点击standalone下方的xilffs,进入xilffs配置界面,将use_lfn设置为true,使xilffs库支持长文件名

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

配置完成后点击OK

打开BSP工程中的system.mss文件,可以在最下方发现xilffs库,选择Import Examples导入示例工程

<center><img src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

参考示例工程,修改helloworld.c文件内容如下:

<embed src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; width="600" height="480" />

<font style="line-height: 40px;"><strong>试验</strong></font>

将zcu102的启动模式设置为JTAG,并且插入SD卡(确保格式化为FAT32格式)

参考ug1182

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

打开串口调试助手,按下图配置并且连接COM4

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

板卡上电后在SDK中,对测试工程选择Debug

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

发现调试结果与代码预期功能相符合

<font style="line-height: 40px;"><strong>注意</strong></font>

前文所述流程如果出现undefined reference的错误,则来源于SDK配置静态库的bug

https://blog.csdn.net/botao_li/article/details/88416441

在工程上打开右键菜单选择Properties打开工程属性窗口,进入Paths and Symbols的Libraries页,删除默认的配置值(SDK的静态库链接指令有bug),改为用下图所示的顺序添加各静态库(注意确保排列顺序),点击OK按钮保存退出

<center><img width="600" src="http://xilinx.eetrend.com/files/2019-10/%E5%8D%9A%E5%AE%A2/100045619-82…; alt=""></center><br>

版权声明:本文为CSDN博主「bt_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/botao_li/article/details/88101417