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.

[参考译文] TMS320F2.8069万:Flash2806X_ToggleTest API产生错误的切换速度

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/575383/tms320f28069-flash2806x_toggletest-api-produces-wrong-toggle-speed

部件号:TMS320F2.8069万
主题中讨论的其他部件:MOTORWARE

您好,

一位客户试图了解其案例中Flash2806X_ToggleTest无法产生所需的10kHz切换率的原因。 事实上,客户报告的频率大约为1.35MHz,因此速度是其100倍以上。

以下是假设:

[] Flash2806X_ToggleTest ROM入口点为0x003FFE7 (这是正确的)

[] Device_cal正在0x003D7C80处调用

[] CPU_rate为12.500L

[]正在使用未修改的标题Flash2806x_API_Config.h生成scale_factor

[] Flash_CPUcaleFactor@0xD02和Flash_CallbackPtr@0xD04正在EALLOW/EDIS帧中设置。

[]调整PLL以与此接头中指定的频率一致(80MHz,PLLCR=16,DIVSEL=2)。

[] PLL正确的指示是:CAN总线能够在指定频率(BRPREG = 4,TSEG1REG=4,TSEG2REG=1,SJWREG=0)下运行,表示它处于预期速率。

我们是否缺少10kHz所需速度的任何其他参数?

入口点是否存在潜在问题?

以下是正在使用的入口点

ABS  003d7c80 _Device_cal

ABS  003ffe7 _Flash2806x_ToggleTest

ABS  003ffef3 _Flash2806x_APIVersionHex

要实现10kHz切换率,还需要考虑其他因素吗?

谢谢!

——Gunter

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

    地图文件中的线条是从单独的计算机上转录的。  _Flash2806X_ToggleTest函数的地址为“0x003ffee7”,长度为8个十六进制字符。

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

    您是否对toggle测试问题有更新?

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

    Gunter,


    是的,您的Flash2806X_ToggleTest的入口点是好的。 从您的帖子中,您的所有假设看起来也很好。 您是否检查了XCLKOUT? 另外,我相信您正在应用程序代码中运行切换测试。 是否可以使用CCS Flash API插件尝试切换测试? 此外,您的应用程序代码是否使用用于GPIO切换测试的GPIO?


    此致,

    Manoj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在哪里可以找到CCS Flash API插件? 这是从Motorware/CCC独立下载的吗?
    它是否可用于CCS 6.1 .3? 上述任何"其他有用的链接"都没有提到这一问题,我也没有在以下文件中找到这一问题的参考: www.ti.com/.../technicaldocuments

    我无法直接访问XCLKOUT,因为原理图上的引脚过载。 我一直依赖这样一个事实:我可以成功地接收CAN消息,表明内核时钟频率至少是可预测的。 是否有理由相信这项测试是不足够的?

    系统时钟以90MHz或80MHz运行,具体取决于我的测试,它等于或接近系统能够运行的最大频率。 我不可能将此值增加150x或135x,这是将10kHz切换测试提高到我所测量的1.5MHz或1.35MHz所需的。 这似乎表明时钟源不能是问题的唯一来源。

    我有几个测试引脚可供选择,我已确认其中多个引脚上描述的tog_test频率。 它们被配置为GPIO输出,在代码中没有其他用途。 输出振荡根据选定的IO线可预测地移动,这证实我至少提供了正确的切换寄存器和掩码参考。

    我主要怀疑的是,如果toggle函数插入点正确,则表示比例因子值设置不正确。 我已确认内存中调试器中的计算与我的预期一致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为是我的根本原因造成了这个问题。

    TRM错误地指定了寄存器和回调的地址。
    Spruh18f第202页指出:
    FLASH_CPUcaleFactor位于0xD02
    Flash_CallbackPtr位于0xD04。

    Flash2806x API自述文件第20页显示CallbackPtr位于0xD02。

    切换它们的位置可纠正原来的问题(我现在可以将输出引脚切换为100.3us,~10kHz)。

    第二个问题是,根据Flash2806x API自述文件,闪存库是使用AMODE =1构建的。 如果是这种情况,则加载了0x34 DP的地址0x3FFDA3将不会导致对0xD00的引用。 而是导致7位寻址模式,这意味着设备尝试从0x1A04而不是0xD04读取flash_CPUScaleFactor。 调用切换测试时使用AMODE =0可解决由此配置产生的第二组问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gunter,

    我证实了卡尔的观察。 如Carl所述,Boot ROM使用的Table PIE Vector SARAM位置不正确。 我已经提交了一个小错误来解决此问题。 请确保将这些变量分配给以下地址位置。

    0xD02 - FLASH_CPUScaleFactor
    0xD04 - FLASH_CallbackPtr

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

    关于您的第二个问题...

    1)您是如何更改AMODE的?
    2)您是否确定要在CCS Build -> C2000 Compiler -> Processor Build中选择
    大内存模型
    统一内存模型

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

    我正在使用makefile生成。  构建标志包括-v28,但不包括-M20 (AMODE=0,每spru430f第83页)。

    我确认在调试器中将AMODE设置为0。

    要在执行切换测试之前配置AMODE=1,我使用了以下命令:

    ASM易失性(" SETC AMODE\n .LP_amode");
    FLASH_ToggleTest( REG, MASK );
    ASM易失性(".c28_amode");

    我还验证了反汇编没有对指令重新排序,并确认为调用设置了AMODE,并注意到对其中一种寻址模式的解释已更改,以反映.lp_amode汇编程序指令。 (@0x04变为@@0x04)。  在此之前的几个指令中,DP加载了0x34,在AMODE=0中转换为0xD00,在AMODE=1中转换为0x1A00。  由于0xD04显式是用于切换的系数,并且0x1A04位于CPU到CLA消息RAM和USB控制寄存器之间的预留内存中, 在短切换测试代码中没有其他机制可以访问0xD04周围的任何内容,这表明在输入函数时AMODE应该为0。


    作为进一步的支持,如果输入AMODE=1,则测试根本无法切换引脚,但当AMODE=0时,由于标量因子的地址已更正为0xD04,引脚将切换为9.957KHz (100.3us)。