在使用emio的情况要注意,由于通过PL的扩展,导致一些问题,如时钟时序,数据、cmd的方向控制都需要注意。
A、emio的clk和clk_fb要短接(原因是要通过反馈修复clk输出时序),可通过内部直接短接(该处理方式有一定风险,反馈距离过短可能跑不了高速)。也可把线引出板外用0欧电阻短接(SDIO应尽量短,且如果CLK有FB管脚的话,要绕到芯片/SD卡座再绕回来。否则如果线过长,可能会造成建立时间不足,传输出错。通常情况下可以不用严格等长,只要对CLK做好隔离就行了)。
B、由于硬件因素或者可能是短接接法问题,导致emmc再使用高速时,时序有问题,进而导致无法分区等问题。
mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0xc00
print_req_error: I/O error, dev mmcblk0, sector 0
Buffer I/O error on dev mmcblk0, logical block 0, lost async page write
通过修改设备树:
broken-mmc-highspeed;
在节点处添加,不使用高速
其他的线如cmd 的data从emio出来是3根线,输入、输出和方向,这3个管脚需要FPGA用源码连接,注意方向不要弄错。
得出结论,使用zynq尽量使用ps端mio的接口如flash、emmc/SD、以太网等,避免一些错误。