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.

[参考译文] Linux/TMS320F2.8377万D:从IMX6 (Linux)到2.8377万 CPU1的SCI引导模式测试

Guru**** 2321850 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/571692/linux-tms320f28377d-sci-boot-mode-test-from-imx6-linux-to-28377-cpu1

部件号:TMS320F2.8377万D
主题中讨论的其他部件:controlSUITEC2000WARE

工具/软件:Linux

您好,

我尝试通过发送字符,等待回显并比较字符来测试SCI引导模式。 只需一个用于测试硬件连接的简单代码,而不会将真正的应用程序代码下载到DSP。 我在controlSUITE下找到了示例代码,并对其进行了如下修改,以便发送字符来验证baudlock。 我发送了以'A'开头的数组中的字符,波特率设置为3.84万。

奇怪的是,前三个字符可以正确地回显和比较,但之后所有回显的值都是0。 我不知道字符大小或可发送的值是否有一些限制。 或者有任何其他更好的方法来测试它而不下载真正的应用程序。

非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     在通过和故障期间,波特率寄存器中的值是多少?

    我看到 你的代码中有一条评论说"// Autobaud currently fails for rates > 3.84万",autobaud是否在低波特率下工作? 您的转换速率有多慢? 注:慢速转换速率将导致自动波特率在较高频率下计算错误。

    此致,
    科迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Cody:

    非常感谢您的回复。 但我不知道在哪里可以找到您提到的波特率寄存器值。 由于我尝试测试了DSP的SCI引导模式(2.8377万d),因此没有JTAG调试器连接到DSP。 我能看到的所有结果或输出都来自Linux终端。

    至于低波特率设置,它来自另一位同事的代码,我没有修改该部分。 他说,在较高的波特率下,即使只发送一个'A',自动波特锁也失败了。 根据参考手册,较低的波特率更适合补偿较慢的回转速率。 所以我认为在这种情况下,低波特率应该是好的。

    如果您能提供一些有关如何找到这些值的提示,我将不胜感激。

    最佳,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有关SCI模块的所有信息都可以在TMS320F2.8377万D 技术参考手册中找到。 波特率寄存器 为"SCIHBAUT"和"SCILBAud",可在19.14 .2.3 和19.14 .2.4 部分中找到。

    此致,
    科迪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Cody,

    您的意思是,即使在SCI引导模式下,我仍然可以通过调试器访问调试模式下的注册吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我假定您在所有SCI通信中都看到了这个问题,而不仅仅是在通过SCI bootloader加载代码时。 没关系,作为测试,您应该从controlSUITE加载Echoback测试用例并通过SCI进行通信。 您可以试用此设置,确定哪些波特率对于您的确切设置是可靠的。 这将确保您已经解决了任何潜在的硬件错误。

    如果一切正常,则必须开始调试软件。

    此致,
    科迪
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Cody,

    您的意思是恢复正常的SCI通信而不是SCI引导加载吗? 但在Linux方面,我为引导模式而不是正常的SCI通信编程,这就是我要测试的情况。 我假设在SCI引导模式下,DSP可以回显字符而无需为其设置寄存器,对吗? 因为在SCI引导的示例代码中,正常的过程是检查自动波特并回声'A',然后下载真实的应用程序。 我想做的是以类似的方式在'A'之后发送和回显更多字符,以验证SCI引导模式的硬件连接。 因为我可以多发送2个字符,所以我觉得是可行的,但还需要设置一些其他的字符。 我不知道是否有办法从Linux端进行测试,而不为正常的SCI通信设置DSP。

    我的描述可能不是那么清楚。 如果有任何混淆,请告诉我。

    最佳,
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    要回答您的问题,我建议您首先测试一个基本的SCI示例。 其次是,DSP应在使用SCI引导加载程序时对发送给它的字符进行回声。

    我知道您想测试SCI bootloader,因为这已失败,我们不知道为什么我建议您尝试使用更简单的设备用例。 如果较简单的代码能够与您的终端可靠通信,那么我们肯定地知道这不是由您的硬件设置引起的,并可以开始研究其他可能的原因。

    此致,
    科迪
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Cody,

    好的,这次我找到了。 不过,我担心的是,我们的董事局是否可以测试这个简单的个案。 我看到了"echoback"示例代码,它提供了如何设置Windows终端而不是Linux终端的说明。 我想知道在另一侧的Linux终端(imx6)上应该怎么做。 图示随附供您参考,您能否给出一些提示?

    第一个是imx6 (Linux端),第二个是DSP。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SCI bootloader无法继续回送您发送的字符的原因是bootloader所需的字符格式。

    请参阅TRM的ROM和引导加载部分。 bootloader要求自动波特锁定为'A',然后要求发送字符标头,如0x08AA。 可能不是预期的那些字符,但问题是,如果未收到预期的头字符,则引导加载程序将退出,设备将分支到闪存(0x8000地址)。

    希望这有所帮助。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Sal,

    感谢您的回复。 我阅读了手册,发现8位启动模式需要0x08AA。 但是我找不到要传输的准确的标题字符,在三个字符后仍然失败,即使我用A,A,8,0开始传输。 我的目的是回显一系列字符,以验证引导模式的硬件连接。 我不知道是否有任何办法成功地做到超过3个字符或不超过3个字符。 非常感谢您的帮助。

    最佳,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要先发送'AA',然后发送'08'。

    您也可以使用串行闪存编程器和十六进制实用程序来执行此操作,尽管这可能会使您尝试执行的操作过于致命。

    请访问www.ti.com/lit/sprabv4

    此外,您还可以按照Cody的建议执行操作,并使用controlSUITE或C2000Ware www.ti.com/.../c2000ware中的sci echoback示例。

    您可以使用CCS通过JTAG构建并将sci echoback示例加载到器件上。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sal,

    我想首先提出建议。 但是根据我的计划,我怎么能用char数组发送'AA'然后发送'08'呢? 我试着这样做:

    unsigned char sendData[8]={'a','a','0','8',1,2,3,4}。 但在'0'(第三个字符)后仍然失败。 您能否提供有关如何执行此操作的详细指南?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,YI:

    原因是您正在发送ASCII字符,并且'08AA'必须作为十六进制值发送。

    请尝试使用sci echoback示例或串行闪存编程器。

    此致,
    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Sal,

    既然您发现了问题,您能否解释如何准确地解决? 我对你所说的ASCII和十六进制值有些困惑。 如果不是下面的情况,我应该如何初始化阵列?
    unsigned char sendData[8]={'a','a','0','8'}或unsigned char sendData[8]={'a','a',0,8}

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有关更多帮助,请参见controlSUITE或C2000Ware串行闪存编程器文件夹中的f021_DownloadImage.cpp。

    您需要发送0xAA 0x08,而不是发送无符号字符'a''a''0''8'。

    请尝试以下操作:
    unsigned int sendData[8]={0xAA, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,0x00,0x00}您可以将0x00更改为测试所需的任何值。

    您需要发送0xAA,然后以十六进制发送0x08。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sal,

    感谢您的建议,我尝试按照您的说法以十六进制发送。 但这次连自动波特都失败了。 似乎只有先发送'A'才能锁定自动波特并使以下传输成为可能。 现在我最多只能成功发送3个字符。 我的代码是根据f021_DownloadKernel.cpp中的autobaudLock修改的。 不知道发生了什么...

    感谢大家!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    自动波特字符应为ASCII 'A'。 您回答正确。

    在自动波特后,您是否能够发送0xAA,0x08,然后继续使用回声堆发送数据?

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sal,

    最后,它还能工作! 我发送'A'以锁定自动波特率,然后发送sendData[8]={0xAA, 0x08, 1,2,3}这样的数组,它会成功回显每个字符。 我只尝试发送最多32个字符,这有助于验证我们的硬件。 但是出于好奇,在“0x08AA”之后,我可以发送多少字节,是否有任何限制? 是我可以访问的整个地址位置还是它的一部分?

    再次感谢你们的建议和耐心!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从某种意义上说,这是一种限制。 数据流应为特定格式。 最终,将向SCI bootloader发送块大小,指定在该块中继续接收多少字节。 有关更多信息,请参阅TRM的ROM和Bootloader部分。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外,bootloader只能对RAM进行编程。 无法对闪存进行编程。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sal,

    我在手册中看到了块大小定义,稍后将仔细阅读。 但我想知道您所说的“bootloader只能对RAM进行编程。 它不能对闪存进行编程。这是否意味着通过引导加载程序接收的所有字符或信息都只存储在RAM中而不是闪存中,与仿真器下载的程序不一样,仿真器可以选择存储在闪存中?

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确。 引导加载程序只能存储在RAM中。 它无法存储到Flash。

    这就是我们提供串行闪存编程器的原因。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当你说bootloader时,它是以我写字符的方式加载的,然后它回声。 对于串行闪存编程器,有一种方法可以将其加载到闪存中,我没有深入了解。 由于我的主要目标是测试,因此存储在RAM中并不重要。 但如果我们要更新DSP的固件,则使用串行闪存编程器。 我想这就是区别,对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正确。

    您也可以搜索论坛以了解更多详细信息。 有许多与DFU相关的线程。

    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的所有帮助! 将在未来深入挖掘。

    最佳,