使用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)。
希望能够得到解答。
