<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