通过GPMC来访问FPGA,FPGA作为norflash。Linux内核版本2.6.32,ARM为DM3730. 采用同步方式读写,需要配置的时序是Synchronous Single Read模式。 为减小篇幅贴上部分代码: |
lei ding1:
不见回复?各位工程师给把把脉吧!!
lei ding1:
看来专家们都很忙,还望,抽空给点意见!
kooking:
一般是这种方式,FPGA准备好数据后给DM3730发中断,收到中断后驱动层就去读。
先确认下是3730是否收到中断,发的数据量也别太大
lei ding1:
回复 kooking:
谢谢回复!
我这边做的机制是这样的:首先,ARM是需要主动来读取FPGA中的数据(这个时机由ARM来随机确定),FPGA接收ARM发送的片选、读/写使能、地址来确定自己的工作状态,如果收到的是读使能,那么FPGA将自己的数据送至数据线。ARM此时来读取数据线上的数据,整个读取的过程仅读取一个word,即16根数据线的状态。
现在的读操作是在驱动层做的,FPGA在相应地址上数据是确定的,整个读的操作仅是在一个readw内完成,FPGA通过中断来触发和ARM主动读取,整个操作应该都是一样的。
现在ARM端readw后,硬件数据线上已经有响应的数据了,但是readw获得的值却一直是0. 其中readaccesstime已经调试过,仍没效果。
不知道问题在哪儿,谢谢!
kooking:
回复 lei ding1:
CONFIG1-CONFIG7这七个配置寄存器配置比较重要,不过相信你们应该注意这点了。
既然写已经OK,可不可以做个测试,写完了后,马上读取刚才写的数据,看这种情况下可不可以正确读取到数据
lei ding1:
回复 kooking:
感谢你的无私回复!
CONFIG这几个寄存器已经尝试配过很多种形式了,方向是依照datasheet上的Figure 10-16. Synchronous Single Read (GPMCFCLKDIVIDER = 1)来配置的。
参考你的建议通过测试发现:仍然不能读到数据,readw的返回值永远都是0. 即使我强制的将外部的数据线置成高位(直接上拉1.8V),仍然返回的是0。
谢谢!
Yue Woo:
回复 lei ding1:
您好!
我在最近的开发中也遇到了同样的问题,写逻辑没问题,读的时候数据总线上数据不为零,但读上来的却始终是零。不知道楼主的问题是否已经解决?如已解决希望楼主能指点一下小弟,感激不尽!
lei ding1:
回复 Yue Woo:
首先请一定确保在IO口初始化时GPMC_CLK设置为允许输入,一般是在Uboot的平台初始化里,默认的初始化是仅输出型的。
Yue Woo:
回复 lei ding1:
万分感谢兄台的指点!刚才将CONTROL_PADCONF_GPMC_NCS7寄存器的第24bit配置为1,问题即得到解决,多谢兄台!