使用AM3354的GPMC总线异步方式与FPGA进行通信,用的是linux 4.4代码。
在设备树中已配置了相关引脚的复用方式。(部分引脚与NAND FLASH复用,未在此列出)
0x20 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad8.gpmc_ad8 */
0x24 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad9.gpmc_ad9 */
0x28 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad10.gpmc_ad10 */
0x2c (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad11.gpmc_ad11 */
0x30 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad12.gpmc_ad12 */
0x34 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad13.gpmc_ad13 */
0x38 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad14.gpmc_ad14 */
0x3c (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad15.gpmc_ad15 */
0x84 (PIN_OUTPUT | MUX_MODE0) /* gpmc_csn2.gpmc_csn2 */
在设备树中已设置异步方式,16位数据,address-data复用及相关的时序:
fpga@2,2 {
reg = <2 0 0x400>;
compatible = "fpga-dpram";
bank-width = <2>; /* 16 bit mode */
gpmc,mux-add-data = <2>; /* address-data multiplexing */
gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off-ns = <60>;
gpmc,cs-wr-off-ns = <60>;
gpmc,adv-on-ns = <0>;
gpmc,adv-rd-off-ns = <20>;
gpmc,adv-wr-off-ns = <20>;
gpmc,we-on-ns = <20>;
gpmc,we-off-ns = <50>;
gpmc,oe-on-ns = <20>;
gpmc,oe-off-ns = <50>;
gpmc,rd-cycle-ns = <60>;
gpmc,wr-cycle-ns = <60>;
};
另外将FPGA的分区设置为CS2,地址设置为0x0A00_0000, 16M。
在linux下编写了一个测试程序,将0xff写到偏移地址4H处,使用逻辑分析仪抓取波形如下:
从波形上看,只能将地址数据(0x04)发送出去,并没有正确的发送数据(0xff)。
希望能够得到解答。
zhongchen zhao:
问题已经解决。
在设备树中漏写了一项时序配置导致的。
Jian Zhou:
回复 zhongchen zhao:
是哪个时序配置?
jian sun2:
回复 zhongchen zhao:
请教个问题,
我和你使用方式一样,是直接在dts文件中添加设备节点就可以了么,还是要增加对应的驱动呢。
不太明白步骤。
另外时序问题是怎么解决的,能不能将完整的dts的配置发出来。
期待你的回复,谢谢!
chen wang6:
回复 jian sun2:
您好,楼主。请问下问题解决了吗?最近我也在接触GPMC与FPGA通信问题,可否给点经验
qingzhu wei:
回复 chen wang6:
一起交流下吗?
Yonghui Chang:
回复 zhongchen zhao:
请问您有没有写篇博客啥的,想向您请教下,刚好也在做这方面
mines:
回复 zhongchen zhao:
和楼主采用同样的方式,之前是3.8内核调试已经可以用了。现在换成4.4的部分问题想与您交流下,关键点可有偿咨询;QQ:1805385182