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如何实现多次boot

Hi,各位专家好!

我使用EVM6678L(PG1.0)+AMC转PCIe板卡+PC,实现了C6678的PCIe boot,上电第一次是可以boot成功的。后面我可能需要再次更新DSP上运行的代码,这时候可不可以不断电EVM板卡和PC就能够实现PCIe boot呢?

比如仅仅是把EVM板复位,让其重新进入PCIe boot模式,再从PC侧接收代码。但是这种方式下,PC会报出“检不到PCIe设备”的错误,因此无法完成重新加载。原因可能是C6678的PCIe不支持热插拔。

而如果不复位DSP,仅仅重新加载代码是可以的,但是DSP不知道去跳转到BOOT_MAIGC_ADDRESS所指向的地址执行程序。

请问大家有没有同样的需求 或者 能否给予合适的解决办法?

先谢谢了!

  • 自己先顶一下~

    请问关于PCIe boot可以不断电反复加载的问题,大家有什么好的建议没?

  • 您好,

    你使用PCIe加载应该是通过host向DSP写了MAGIC_ADDRESS并触发IPC,然后才能加载并跑起来吧?

    请问你的PC是跑的linux系统下检测到PCIe板卡么?请共享一下你使用AMC2PCIe板卡接到PC上的经验吧,现在有客户想在winXP下使用,但是我们目前没有这方面的驱动,不知你是否有相应的经验共享一下,谢谢!

  • Hi, Andy

    1、“PCIe加载通过host向DSP写了MAGIC_ADDRESS并触发IPC,然后才能加载并跑起来”,不需要触发IPC中断,我使用的EVM6678L,PG1.0版本,I2C EEPROM中的IBL代码会不断检测MAGIC_ADDRESS,直到不为0就跳转执行用户加载的应用程序。Host PC只负责发送boot table,并最后写入MAGIC_ADDRESS。详细参考..\mcsdk_2_00_05_17\tools\boot_loader\examples\pcie\docs下的readme文档。(文档中关于拨码开关的设置有一个错误,SW9-1应为off)

    2、我的PC是WindowsXP系统,需要安装Windriver软件,驱动可以自己生成。

    首先,PC上电检测到PCIe板卡时,在设备管理器中显示是“多媒体控制器”,驱动生成方法是:

    打开windriver工具,查看到TI PCIe设备,然后按照软件提示步骤生成.INF文件,即生成了PCIe驱动。这时候就可以为新扫描到的TI PCIe设备安装驱动,加载该文件,就完成驱动的安装。

    然后就可以仿照开发包中pciedemo.c的做法来进行PCIe boot了。

    如果大家对Windriver工具不太熟悉的话,可以先了解一下基本的功能,对调试PCIe boot帮助很大。有问题欢迎继续交流,谢谢!

     

  • tthnny,

    非常感谢您的共享!

    关于多次PCIe加载,按我的理解,如果不复位DSP,不会重新执行bootloader,程序应该加载不起来才对。但是按您的测试结果来看,不复位DSP,程序可以加载起来,但是不能正常运行起来,那么此时的MAGIC_ADDRESS中的值是否正确呢?

  • Andy,

    关于多次PCIe加载,如果复位DSP,会出现PCIe设备不识别的问题。

    如果“不复位DSP,程序可以加载起来,但是不能正常运行起来”,

    是的。后面再次加载时,我连接过CCS查看过memory,发现boot table都已经加载成功,且MAGIC_ADDRESS也已经更新。只是DSP当前运行的程序不会去检测该地址,通过手动修改PC指针可以运行程序。(让所有已经加载过的DSP程序运行时都去检测magic address这个值也不太靠谱)。

    不知道达人们有没有别的办法?

  • 你好tthnny!  

      1、 “Host PC只负责发送boot table”,我想问下这个boottable是怎么生成的?

      2、已经用windriver生成了INF文件,之后是将pciedemo.c按照windriver的函数改写吗....继而发布成.sys吗?

      非常期待你的帮助....谢谢.....

  • 你好,

    1、关于boottable格式在mcsdk_2_00_05_17\tools\boot_loader\examples\pcie\linux_host_loader下有很多实例,和I2C boot下的数据格式一致(见bootloader文档),我的转换方法是使用mcsdk_2_00_05_17\tools下的bttbl2hfile、hfile2array工具,你可以看下对应工具的使用说明。

    2、是仿照pciedemo.c的方法在windriver下改写,最后在VC6.0下开发。

    祝你好运~

  • tthnny, 您好

    可否分享一下WinXP下PCIe boot的相关资料,如基于V6.0开发的bootloader程序工程,谢谢

  • Hi,all

           继续该问题的提问~ 请大家关注,共同探讨这个问题。

    谢谢!

  • Hello tthnny~

    我的電腦是win7 64bits ,想要照您之前所提的用windriver產生*.INF檔,讓PCIe可以在Windows的環境下驅動~

    可是我目前沒有windriver的軟體,不知道您方不方便將您產生的.INF提供給我使用~

    非常感謝您的幫忙!!!

  • 另外有兩個問題想請各位專家幫忙

    1.在\Texas Instruments\pdk_C6670_1_0_0_19\packages\ti\drv\pcie\src下的pcie.c需要兩個6670EVM互相連接,

    想請教此連接是把兩個EVM卡各透過AMCC轉PCIe插到同一個主機板上嗎,亦或是有其他方式?

    2.我目前使用的作業系統是WIN7,上面有安裝了一個VMWAVE來仿linux作業系統,想跟各位請教,若是在Windows環境下都不能驅動PCIe,

    可使用此仿真器來驅動嗎?

    謝謝幫忙!!

  • Hi, spann

    仅仅提供.INF文件给你是没用的,因为它会调用windriver的一些东西,所以你可能要先安装一下windriver软件了。谢谢!

  • 您好:

    目前我先用Linux 系統來跑PCIe boot的範例,再說明文件檔的第12頁有提到

    First run “sudo minicom–s” to set the correct configuration: 115200bps, 8-N-1, Hardware flow control: OFF,

    Software flow control: OFF, and select the correct Serial Device. Save then run “sudo minicom” to monitor the port.

    請問 我要如何知道correct Serial Device是在哪個port上呢?

    ps.我目前的系統是將6670evm上的miniUSB連接到Linux PC上的usb阜~

    是否Linux PC需要額外安裝其他的驅動程式去偵測此裝置呢?

    謝謝回答!!!

  • Hi,tthnny,你好,我现在正在按你说的用windriver进行pciedemo.c的改写,弱弱的问一下,通过windriver的哪个API可以直接对DSP进行地址读写呢,例如0x21800000?我试了WDC_ReadMem32(),但是总是异常,搞不懂怎么回事了。跪求答案。

  • 您好

    我使用 同样的步骤,用i2c_eeprom_writer.out把IBL烧写到0x0c00 0000,并用另外一个out,下载IBL成功。

    但是在PC下的windriver软件识别不到6678 PCIe设备 ID号,识别不到该设备

    我是6678先上电的,然后PC上电。(有个问题,好像6678这边可以不外供电源吗?插到主板上后,接口给供电了,相关LED灯都亮了)

    请问会是什么原因呢?

    非常感谢

  • 您好

    我使用 同样的步骤,用i2c_eeprom_writer.out把IBL烧写到0x0c00 0000,并用另外一个out,下载IBL成功。

    但是在PC XP系统下的windriver软件识别不到6678 PCIe设备 ID号,识别不到该设备

    我是6678先上电的,然后PC上电。(有个问题,好像6678这边可以不外供电源吗?插到主板上后,接口给供电了,相关LED灯都亮了)

    请问会是什么原因呢?

    非常感谢

  • 您好。请问我烧写IBL完成,并下载成功。拨码开关安装

     使用PCIe boot,为什么SW9 pin1需要设置为off,请问这个SW9 pin1是用来干嘛的?我看原理图上,是SSC时钟使能与否,这个时钟是指和接口连接上是否使用另外一个PCIe设备的参考时钟吗,这样两设备就使用同源时钟了。是这个意思吗?

    这个应该不支持热插拔吧,需要6678和主机都断电,如需更改设置,重新上电,来识别设备。另外,6678插到主板上,就不用外接12V电源吧,接口可以给他供电。对否?

    通过适配板插入PC主板的PCIe插槽里,不过我中间使用了PCIe延长线(淘宝上买的,板子不方便插进去,这个应该没影响)。SW9 pin设置的还是ON,PC上的windriver软件识别不到该设备。请问会是什么原因?

    期待您帮忙指导下,谢谢

  • 您好

    请问你利用windriver生成的驱动。加载inf文件,如何加载?来完成驱动的安装。

    仿照pciedemo.c进行PCIe boot,能否留个联系,交流请教下哈。谢谢

  • 您好

    我这边6678 连接上PC后,根据pciedemo.c写XP下的6678 PCIE,可以正常PCIe boot,对6678 DDR进行初始化。但是在PCIE通信过程中,进行DMA写时,即向6678DDR中写一片数据,有时候可以成功有时候失败,另外从DDR中读数据出来,也会出现这种情况。

    请问你们在调试过程中遇到过类似的情况没?如何解决的?谢谢

  • 您好

    PC跑XP系统,使用windriver软件并仿照pciedemo.c写好了驱动和应用测试进行pcieboot。但是我遇到个问题,就是同样的代码,在一台电脑上可以DMA写 读,但是写 读时1MB数据时,只会进行不到1MB数据,后面的数据也不是错了,只是没有进行写 读。但是换一台电脑后出现黑屏现象,多次尝试也是如此。

    能否交流下。谢谢。

  • lucky2:您好

           请教pciedemo.c中有这么一句:iowrite32(i, ptrReg + IB_BAR(i)/4);

          我在windriver 中使用 WDC_WriteAddr32 (hDev ,dwAddrSpace , IB_BAR(i)/4 , i ) ;对应(其中dwAddrSpace =0),不知道对不对?

    谢谢!

  • 你好

    你邮箱或QQ多少?

  • lmoonh@163.COM,谢谢!
  • 您好,我是一个初学者。最近在看PCIe boot。core0现在可以引导起来,但是别的核没有实现。想请教一下方法法。并且也关注您最后PCIe boot不断电反复加载的问题。

  • 您好,能否分享一下WinXP下PCIe boot的程序
  • 您好,能否分享一下WinXP下PCIe boot的程序,2252165831@qq.com