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.

C6678通过PCIe与windows xp主机连接及设备资源分配的问题!!!



我现在尝试让C6678与运行windows xp系统的计算机连接。共尝试了两种方法,遇到如下问题:

1.利用PCIe的exampledesign工程,把6678设置成EP模式,主机进入windows后,用仿真器把代码下载进6678并运行,则可以正常连接上,在winndows里用pcie tree也可以扫描到设备,但是我重启windows后,就找不到6678这个pcie设备了,为什么?难道计算机重启的时候会和6678断开物理连接?6678这个例子程序是否有重连机制呢?

2.改用 pcie boot模式,则在计算机进入windows的情况下,我给6678上电让其完成pcieboot,这时在计算机上是可以找到6678这个设备的,但是重启计算机后就找不到6678了,必须重新复位6678让其重新boot才行,和情况1的情形一样!

我尝试让c6678先上电后运行exampledesign的代码,则其等待在link training那个步骤,当计算机一旦上电,6678马上显示link is up,但是当我进入windows后,仍然找不到设备啊!!!

求大神指点!!!有谁成功让6678与windows主机连接并获得windows系统分配的资源?

  • 您好,

    如果要让PC枚举到C6678设备,不需要运行你所谓的exampledesign工程,只需要C6678配置成EP,PC作为RC,将EVM配置为PCIe boot之后,在Windows下就能找到C6678设备。如果windows系统复位后,如你所说,对C6678进行下电复位或者进行local reset即可让C6678被枚举到。

    不太明白你最后“让6678获得windows系统分配资源”,PC枚举到C6678后就能获取C6678作为EP的memory资源映射。你可以查看C:\ti\mcsdk_2_00_09_21\tools\boot_loader\examples\pcie\linux_host_loader下的pciedemo.c.

  • PC重启后,会有PCI复位过来啊 这时候复位DSP 如果PCIe配置的代码烧写的程序或者IBL中就可以完成枚举了

  • 感谢您的解答,通过把6678配置成pcieboot,成功与windows链接上了,但是Windows重新启动的时候,我观察到地址是0x21800004的寄存器CMD_STATUS的最后一位ltssm_enable位(链路训练使能)变成了0,即链路训练被关掉了。并且不会自动再变成1。这样导致了重启连接不上。

    计算机重新启动的过程中,一共会有两次把这个寄存器改变,从而不使能链路训练,我通过jtag手动修改这个寄存器来使能链路训练,则计算机就能成功枚举并给6678分配资源。

    1.我想知道为什么使能有效位会被改变,是不是6678这边的其他什么寄存器设置不正确?

    2.6678如何能知道计算机进行了重新启动呢??

    3.另外1.0版本的pcieboot是不是需要进行i2c的二次引导修复bug呢?我现在没有做这一步,但是pcieboot也成功了啊?

  • 感谢您的解答,通过把6678配置成pcieboot,成功与windows链接上了,但是Windows重新启动的时候,我观察到地址是0x21800004的寄存器CMD_STATUS的最后一位ltssm_enable位(链路训练使能)变成了0,即链路训练被关掉了。并且不会自动再变成1。这样导致了重启连接不上。

    计算机重新启动的过程中,一共会有两次把这个寄存器改变,从而不使能链路训练,我通过jtag手动修改这个寄存器来使能链路训练,则计算机就能成功枚举并给6678分配资源。

    1.我想知道为什么使能有效位会被改变,是不是6678这边的其他什么寄存器设置不正确?

    2.6678如何能知道计算机进行了重新启动呢??我的6678与计算机之通过pcie差分线相连啊,没有其他单端控制线。

    3.另外1.0版本的pcieboot是不是需要进行i2c的二次引导修复bug呢?我现在没有做这一步,但是pcieboot也成功了啊

  • 我在6670上测试PCIE,也遇到类似问题,第一次成功连接上后,如果重启电脑系统,6670的PCIE会断开,不会自动重新链接!

    这个难道是C66都有这问题,不知官方有什么解决办法?

  • Henry 您好,

    在PC重启时,由于对端异常,DSP侧的PCIe link自然就会断掉,所以建议对DSP同时进行复位,重新建立连接。

    至于PG1.0是否需要I2C 二次boot,这个是从稳定性的角度考虑,因为PG1.0存在PLL unlock的bug,有可能导致加载失败,所以建议再设计时加上I2C EEPROM以免加载失败时可用二次引导。

  • Andy您说的很对,但是计算机和6678仅仅通过pcie差分线相连,6678怎么能知道计算机重启了呢?

    另外,6678是否可以通过设置某些寄存器来让其链路训练使能不被关掉呢?我还在探索这个。。。

    除了这个KeyStone Architecture Peripheral Component Interconnect Express(PCIe)手册外,还有没有其他介绍6678的pcie功能的手册呢?

  • 当PC重启的时候,即链路断掉时,RC(即PC)会发出一个 hot reset request interrupt给EP(即DSP),这时DSP上的PCIESS 会自动将LTSSM_EN置为0,这个和你的观察一致。这时EP会处在一个“detect quiet” 状态,所有正在发送的包在接受端都会报错丢掉,所有未发出的包在发送端就会被禁止掉。这个时候EP软件需要做一个local reset给PCIESS,重新初始化流程,重新做接入。在一个普通的PCIE系统中,会有一个PERST#信号,该信号为全局复位信号,由处理器系统提供,处理器系统需要为PCIe插槽和PCIe设备提供该复位信号。PCIe设备使用该信号复位内部逻辑。但由于我们的AMC卡上没有引入这个信号,所以目前只能由软件来完成re-initilization

  • 您好,正如您所说的,当没有这个reset信号,我如何知道主机重启了,DSP的pcie被hot reset了呢?

    另外我发现,现在我们系统有了reset#信号,当我接收到reset#信号后我复位pciess,但是主机就会又把我的dsp的pcie给hot reset了。

    我现在需要在接收到reset#信号后延迟一段时间后再重练pcie才可以,但是延迟的这段时间很难把握,有时候会因为连接太早而被hotreset,有时候会因为连接太晚而分配不到windows的内存资源。。。。

    这个TI是如何解决的,有没有成熟的方案呢?我们用FPGA的pcie就不会出现这种问题,即使计算机重启,PCIE也一样会连接上

  • 你好 求指导通过PCIE使C6678与运行windows xp系统的计算机连接的问题

      我使用的是自己板卡,6678通过交换芯片pex8648与主机连接。交换芯片采用默认配置。现在开机,加载PCIe的exampledesign工程后,在winndows里用pcie tree也可以扫描到设备。pcie tree可以看到的BAR空间完全等同于我在6678中的bar空间。但是我在Pcie tree中往bar空间写一个数,在6678对应的bar空间映射的内存地址中却看不到我写的数。

    就是说,怎么样才能从主机写一个数或者命令,写到dsp内存?

     另外 在使用pcie tree时,怎么从dsp把数据发送到主机,是需要另外写驱动还是可以利用Pcie tree?

     希望能指导 不胜感激