This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335X gpm读取数据读不出来的问题

Other Parts Discussed in Thread: AM3352, SYSCONFIG, AM3359

裸机程序  ,

starterWare源码  

evmAM335x   

开发工具:IAR 7.0

芯片:am3352

8位    同步读写    看波型也是对的,FPGA数据也出来了, 读FPGA  ,每次读出来数据据是 0不知道为什么,请指教

问题

1:为什么一直读出来是0

Memory browser中看到这个地址中确实是0,为什么手动不给修的改

原码如下

int main(void) 

{
int databuffer =0;

GPMCClkConfig();
EDMAModuleClkConfig();
NANDPinMuxSetup();//对AD gpmc_CLk做过配制

GPMCModuleSoftReset(0x50000000);
while(GPMCModuleResetStatusGet(0x50000000) != 0x01);//等待复位完成

HWREG(0x50000000 + 0x10) = 0x00000008;//SYSCONFIG
HWREG(0x50000000 + 0x1C) = 0x00000000;
HWREG(0x50000000 + 0x40) = 0x00001FF0;
HWREG(0x50000000 + 0x44) = 0x00000000;
HWREG(0x50000000 + 0x48) = 0x00000000;
HWREG(0x50000000 + 0x50) = 0x00000a12;//GPMC_CONFIG

HWREG(0x50000000 + 0xC0) = 0x28000001;//congif1
HWREG(0x50000000 + 0xC4) = 0x00101004;//congif2
HWREG(0x50000000 + 0xC8) = 0x22080814;//congif3
HWREG(0x50000000 + 0xCC) = 0x10081018;//congif4
HWREG(0x50000000 + 0xD0) = 0x010E1414;//congif5
HWREG(0x50000000 + 0xD4) = 0x0f070000;//congif6
HWREG(0x50000000 + 0xD8) = 0x00000F41;//congif7
while(1)
{
databuffer=(*(volatile unsigned char*)(0x1000004));  //databuffer为0,为什么
}
HWREG(0x10000004)=databuffer;
}

  • 用的是片选几?地址空间确认和其他的几个片选有没有冲突?

  • 你怎么判断FPGA端的数据出来了

  • 看你用的硬件是EVMam3359,印象这个demo板是没有接FPGA的,你是飞线接出来的吗?

  • Steven Liu 说:

    用的是片选几?地址空间确认和其他的几个片选有没有冲突?

    你看看程序就知道了,我只用了CS2,其它的都没用,没有充突 ,

    因为CS2时序都正常,它已工作了

  • leo chen 说:

    你怎么判断FPGA端的数据出来了

    你看我的程序 ,databuffer 等于0    ,我量data线是是有数据据的

  • Jian Zhou 说:

    看你用的硬件是EVMam3359,印象这个demo板是没有接FPGA的,你是飞线接出来的吗?

    板子是我自己做的,在你们的EVMam3359上改了只加了FPGA

  • leo chen 说:

    你怎么判断FPGA端的数据出来了

    示波器量的,这点我确定数据FPGA有数据

  • 先说问题2,

    TRM中,DeviceType的表述:

    Selects the attached device type
    0h = NOR Flash like, asynchronous and synchronous devices
    1h = Reserved
    2h = NAND Flash like devices, stream mode
    3h = Reserved

    FPGA 是选 类nor flash,搜过网上的例子,没有选类nand,猜想选了类nand的话需要按照nand的协议去操作,FPGA端也要复杂了,估计会画蛇添足。

    问题1,

    首先当然肯定是要把DSP端的GPMC 配置好。

    其次读FPGA的大致流程,也不是直接读0x1000004地址的值。

    个人意见:DSP作为master,要先把读数据的buffer地址传给FPGA,cs端口输出,然后OE端口输出,FPGA在把数据写到对应的地址。之后,DSP再拿到数据。

    可查看TRM中,同步模式的时序图

    还有是不是有AD复用之类其他的问题。

    可以先看看,DSP端,CS和OE的波形是什么样的。

    对,同步模式,还有看你的CLK的波形。先单方面确认DSP端和FPGA端分别没问题了,再联调。

    可以先进行单字节的调试,这样就能确保链路通。

    以上意见,没实践,仅个人想法,供参考。

    如果楼主问题有进展,有劳更新上来。多谢~~

  • 先谢谢你

    xxxx yu 说:

    先说问题2,

    TRM中,DeviceType的表述:

    Selects the attached device type
    0h = NOR Flash like, asynchronous and synchronous devices
    1h = Reserved
    2h = NAND Flash like devices, stream mode
    3h = Reserved

    FPGA 是选 类nor flash,搜过网上的例子,没有选类nand,猜想选了类nand的话需要按照nand的协议去操作,FPGA端也要复杂了,估计会画蛇添足。

    问题1,

    首先当然肯定是要把DSP端的GPMC 配置好。

    其次读FPGA的大致流程,也不是直接读0x1000004地址的值。

    个人意见:DSP作为master,要先把读数据的buffer地址传给FPGA,cs端口输出,然后OE端口输出,FPGA在把数据写到对应的地址。之后,DSP再拿到数据。

    首先要谢谢你,

    对你回答的第一个问题我已理解了,我是按NOR配的,

    2:我看过波形,同步模式的时序图一样,CS ,OE都是对的,

    3:”其次读FPGA的大致流程,也不是直接读0x1000004地址的值“这句话没理解,读写都是硬件完成的,

    当我读时,硬件会自动发0x1000004地址的值的,如果我不对,你方便写一下我应该怎么读,我现在要问题

    就是读不上来值,

    我这样读错了吗    databuffer=(*(volatile unsigned char*)(0x1000004)); 

  • xxxx yu 说:

    先说问题2,

    TRM中,DeviceType的表述:

    Selects the attached device type
    0h = NOR Flash like, asynchronous and synchronous devices
    1h = Reserved
    2h = NAND Flash like devices, stream mode
    3h = Reserved

    FPGA 是选 类nor flash,搜过网上的例子,没有选类nand,猜想选了类nand的话需要按照nand的协议去操作,FPGA端也要复杂了,估计会画蛇添足。

    问题1,

    首先当然肯定是要把DSP端的GPMC 配置好。

    其次读FPGA的大致流程,也不是直接读0x1000004地址的值。

    个人意见:DSP作为master,要先把读数据的buffer地址传给FPGA,cs端口输出,然后OE端口输出,FPGA在把数据写到对应的地址。之后,DSP再拿到数据。

    可查看TRM中,同步模式的时序图

    还有是不是有AD复用之类其他的问题。

    可以先看看,DSP端,CS和OE的波形是什么样的。

    对,同步模式,还有看你的CLK的波形。先单方面确认DSP端和FPGA端分别没问题了,再联调。

    可以先进行单字节的调试,这样就能确保链路通。

    1:问题2 我是选 的NOR ,

    2:我用示波器看了,CS OE等波坏都是正确的

    3:“其次读FPGA的大致流程,也不是直接读0x1000004地址的值。”这句怎么理解,不是硬件直接完成吗?如果的我错了,请写出正确的

    我现在就是读出来数据据为0,

  • 顶起来,问题还是没有解决

  • 我的理解是,我们把地址值送给了fpga,fpga在oe信号后,给对应地址写值,按道理这个时候我们才能在这个地址上拿到fpga的值。

    直接那样取值,是不是不妥当。

    读写都是硬件自动完成的,是不是就是,读某个地址的值,DSP就自动完成这整个读cycle的操作。我也不明白。还是请ti的专家来支持。

    还是说,需要有其他的什么设置。

    你是怎么看DSP读取地址上的值一直为0,   打印?CCS的Memory browser?还是? 

    另,你的代码中:NANDPinMuxSetup();//对AD gpmc_CLk做过配制

    可否告知这个函数的实现?

    335x也在学习中。

  • xxxx yu 说:

    我的理解是,我们把地址值送给了fpga,fpga在oe信号后,给对应地址写值,按道理这个时候我们才能在这个地址上拿到fpga的值。

    直接那样取值,是不是不妥当。

    读写都是硬件自动完成的,是不是就是,读某个地址的值,DSP就自动完成这整个读cycle的操作。我也不明白。还是请ti的专家来支持。

    还是说,需要有其他的什么设置。

    你是怎么看DSP读取地址上的值一直为0,   打印?CCS的Memory browser?还是? 

    另,你的代码中:NANDPinMuxSetup();//对AD gpmc_CLk做过配制

    可否告知这个函数的实现?

    335x也在学习中。

    1:读某个地址的值就DSP硬件完成的,你看看你巾的时序图就知道了

    2:NANDPinMuxSetup();原函数中对有蚂引脚没配,我做了配置

    3: 对每个引脚时序量过,都是对的

    4:一直为0,   打印也是,CCS的Memory browser中也是0,

  • 周末,我来试试。

  • 支持们,请继续,我等的都快老了

  • 所有项目都做完了

    就GPMC搞不定

  • 我自己在3359上想做点尝试。。。。不过好像有点问题。

    因为没有外接fpga,手头也没示波器。但是感觉cs和oe的值貌似没输出。

    我把工程贴上来。请你帮我看看,哪设置的不对。或者和你的对比一下吧。

    看看我们的思路有什么差异。。

    GPMC.zip
  • xxxx yu 说:

    我自己在3359上想做点尝试。。。。不过好像有点问题。

    因为没有外接fpga,手头也没示波器。但是感觉cs和oe的值貌似没输出。

    我把工程贴上来。请你帮我看看,哪设置的不对。或者和你的对比一下吧。

    看看我们的思路有什么差异。。

    1:你的工程我打不开,说我没装ARM5.2,我看你是用操作系统写的
    2:我看了你的baseaddress 为 end: 0x0a000000 + 0x0EFFFFFF  这个好象是错的,你这是从160M开始的
    你把它改成为从16M起,end  0x01000000+0xFFFFFF 大小分配16m
                  CONFIG7 配为0xf41,先不要开MMU试一下
    试一下

  • 看数据手册,gpmc 的空间是512M ,前16M 不用,其他空间理论上应该都可以访问吧。

    起始地址从160M开始,或16M起应该是一样的吧。

    还有大小,16M或者32M ,也应该无差吧。

    对于MMU 不开的话,地址空间是没法访问的吧。

    先谢谢你,上面的问题,我自己先试试。

  • xxxx yu 说:

    看数据手册,gpmc 的空间是512M ,前16M 不用,其他空间理论上应该都可以访问吧。

    起始地址从160M开始,或16M起应该是一样的吧。

    还有大小,16M或者32M ,也应该无差吧。

    对于MMU 不开的话,地址空间是没法访问的吧。

    先谢谢你,上面的问题,我自己先试试。

    不是,应该是16M的倍数据,

  • 请大家继续

    TI的支持呢

  • 请问片选信号配了吗

  • Yaoming Qin 说:

    请问片选信号配了吗

    所有引脚信号都正常

    片选没问题,已正常工作

  • 你问题解决了么?我在AM3359上测试与FPGA的同步交互,读的数据也是0,,异步读就没用问题。

    解决的话麻烦给个方法,谢谢!