我的板子是am3517,设置gpmc功能,异步16位数据线,设置wrofftime=1f(31个fclk周期),cstime=1f,片选周期和写周期都是31个fclk周期,且波形都很正常,我是单步通信,每隔一秒钟写一个数据,示波器显示数据的保持时间只有片选的一半,根据datasheet上看异步不复用写模式数据应该保持到写周期结束,如图所示,黄线是片选信号,蓝线是数据表示1,但是后来又降低为0了,请ti的工程师帮忙分析一下,最近被这个事情搞的吃不好睡不好的。
xiang li5:
就是这个图
xiang li5:
路过的懂点的,都给点建议啊给出我的寄存器配置,打印出来的。
xiang li5:
datasheet里面有这一节,这个怎么理解啊?
9.1.5.3.10 Bus Keeping SupportAt the end-cycle time of a read access, if no other access is pending, the GPMC drives the bus with thelast data read after RDCYCLETIME completion time to prevent bus floating and reduce powerconsumption.After a write access, if no other access is pending, the GPMC keeps driving the data bus afterWRCYCLETIME completes with the same data to prevent bus floating and power consumption.
xiang li5:
回复 xiang li5:
有没有ti的工程师帮帮忙啊
xiang li5:
没人吗
Jian Zhou:
回复 xiang li5:
请问您是用AM3517接什么外设呢?是NAND Falsh么?
xiang li5:
回复 Jian Zhou:
谢谢你的回复。
我模拟的是norflash,外设其实是继电器低速设备,我调用gpmc.c里面的函数,引脚默认配置都是gpmc功能,我在board-am3517ev.c这个文件里写入
gpmc_cs_write_reg(5, GPMC_CS_CONFIG1, 0x00001200);//16-bit, Async
gpmc_cs_write_reg(5, GPMC_CS_CONFIG2, 0x001F1F00);
gpmc_cs_write_reg(5, GPMC_CS_CONFIG3, 0x00060604);
gpmc_cs_write_reg(5, GPMC_CS_CONFIG4, 0x1F081F06);
gpmc_cs_write_reg(5, GPMC_CS_CONFIG5, 0x000C1F1F);
gpmc_cs_write_reg(5, GPMC_CS_CONFIG6, 0x89060000);
gpmc_cs_write_reg(5, GPMC_CS_CONFIG7, 0x00000F55); //0x15000000然后在用户层映射地址,出来的波形还是那个样子,这个我就不知道是哪里的问题了,按道理来说,数据位应该一直保持到片选结束啊。
xiang li5:
回复 Jian Zhou:
在吗
Jian Zhou:
回复 xiang li5:
有没有在U-boot下抛开Linux OS用裸方式测一下读写波形呢?
我觉得还是寄存器某些部分没有配对
xiang li5:
回复 Jian Zhou:
十分感谢,我把原来gpmc的资源全部换成慢速的gpio了,基本可以满足要求,您这个方法我可以试一下