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.

[参考译文] TM4C123GH6PM:仅在安装了引导加载程序的情况下、不能与 Tivaware 引导加载程序进行 CANbus 通信。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/608582/tm4c123gh6pm-no-canbus-communication-with-tivaware-bootloader-with-just-the-bootloader-installed

器件型号:TM4C123GH6PM

已为基于 Tivaware 闪存的引导加载程序启用 CAN 通信。 当引导加载程序被正在运行的应用程序调用时、与引导加载程序成功进行 CAN 通信、但在引导加电或在未安装应用程序的情况下复位时没有响应。

如果使用引导加载程序安装了应用程序、则正确的 CRC 将导致加载应用程序。 已验证在安装具有错误 CRC 的应用程序且该应用 程序未运行后是否调用闪存引导加载程序。 引导加载程序也安装在默认地址位置。

更改 了 BL_CAN.c 以支持11位消息、而不是29位消息、但除了  单独的引导加载程序启动之外、这也用于引导加载程序的工作调用。

Bl_config.h 已被修改以匹配调用应用中的 CAN 和系统控制时钟配置、并找到此线程来验证 引脚配置。 https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/535111/2171193

不确定通过 BL_CAN.c 初始化 CAN 连接时缺少什么其他设置步骤

此外、不确定如何验证引导加载程序是否正在执行 BL_STARTUP_CCS.s 的 ResetISR 中的所有步骤

谢谢、

埃伯哈德

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

    我的朋友-在尝试使用引导加载程序时、这里有很多人"受苦"(原因总是不明)。

    [引用 USER="L Eberhard"]更改 了 BL_CAN.c 以支持11位消息而不是29位[/引用]

    [报价用户="L Eberhard"] Bl_config.h 已被更改,以匹配调用应用程序中的 CAN 和系统控制时钟配置[/quot]

    对于您的问题-正如我以前在类似的半"巨人"工作过一样-我知道这里的员工更喜欢您的"坚持原始设置/配置"-这可以使他们获得最高效的帮助。   但是、至少您创建了两个"偏差"、这可能会让供应商尝试复制您的发现。

    "删除所有这些"更改"-并运行代码(和测试)、并运行"尽可能与供应商代码最接近"、可能会对您有所帮助吗?  如果您的"问题"持续存在-供应商则有明确的确认途径-您的"支持"只能增加...

    这里的所有人都必须"感受到"、并"敏感地关注"负责解决如此众多问题的"有限供应商员工"的需求。     您通过"移除变更"来"放松工作"似乎是获得他们关注和进一步支持的卓越方式...    (我认为您的"CAN 和系统控制时钟配置"(显示)不大、但它们"未显示"、因此会出现错误/误解。)

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

    感谢您的回答和澄清。 很抱歉、我的原始帖子出现了错误、我希望此信息更有用。

    我切换到了123g boot_serial 演示点、而不是我开始使用的129个示例。 对 UART 定义进行了注释、这些是配置修改:(CAN0_Rx 连接到 PB4、CAN0_Tx 连接到 PB5)我之前添加的链接是我用来确定如何设置 PCTL 定义的链接。 POST 似乎也验证了这些端口是否适用于 CAN 引导加载程序。

    #define CAN_ENABLE_UPDATE

    #define CAN_RX_Periph SYSCTL_RCGC2_GPIOB
    #define CAN_RX_PORT GPIO_PORTB_BASE
    #define CAN_RX_PIN 4.
    #define CAN_RX_PIN_PCTL 8.

    #define CAN_TX_Periph SYSCTL_RCGC2_GPIOB
    #define CAN_TX_PORT GPIO_PORTB_BASE
    #define CAN_TX_PIN 5.
    #define CAN_TX_PIN_PCTL8.

    CAN_bit_rate 未注释、并保留默认的1000000。

    根据您的建议、我保留了 TI 提供的用于使用29位消息的默认 BL_CAN 文件。 我还只在 Tiva 上安装了引导加载程序并重新启动了电路板。 如果我正确理解启动脚本,它应该位于 UpdateerCAN 的 BL_CAN.c while 循环中,等待消息。

    发送 ping 命令后、没有任何内容被发回。 如果我单步执行调试器、它将跳转、而不是单步执行反汇编和程序外部。

    在论坛中进行的一些搜索提到、调试器不能在不编辑 GEL 文件的情况下单步执行 SRAM 中的代码。 我对此没有任何经验。 在哪里可以找到实现这一目标的示例?

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

    我的朋友-没有人会为您带来悲伤-相反、我们希望"快速、轻松、加强"供应商员工和/或(我们的外部人员)的努力-他们会在可能的情况下尝试"加入"并提供帮助。

    我怀疑 CAN 引导加载程序的使用最少、因此您满足"更好匹配"供应商示例的要求可能会提高供应商的兴趣。    一些进一步的具体情况应有助于供应商代理或其他129个用户(公司/我不使用129个用户)提供协助。

    您可能会注意到以下情况(同样、我的希望是、事实证明这对供应商代理或具有 CAN 专业知识的人员很有帮助)"

    • 您是否有一个"真正的"CAN 收发器为您的 MCU 的 CAN 引脚供电?
    • 如果是-该收发器是否指定以1M、CAN 比特率运行?   (公司/我始终认为最好是以较低的速度"开始"、因为这些事实证明更易于"工作"-至少在开始时。
    • 123个示例代码包括"简单 RX/TX CAN"-我们发现这对提供 CAN 总线非常有帮助。   也许您的129个示例提供了一个类似(简单)的示例 CAN 编程?
    • 从未使用过 CAN 引导加载程序-我不确定您选择的端口是否与用于引导加载的端口"重叠"。   否则、您可能需要更改 CAN 端口和/或配置这些 MCU 引脚以进行 CAN 操作。   (该技术在中有很好的介绍、包括"简单 CAN RX/TX 代码示例"。)
    • 有一份特别应用手册、重点介绍 MCU 的引导加载程序。    您是否发现并深入审查了它的指导和指示、然后很好地遵守了它?
    • 也许是"超杀"、但您(临时)从引导加载程序中"移走"、而不是使用"简单 CAN RX/TX"来尝试与您的"远程" CAN 板建立(某些)"更基本"的 CAN 通信。   (这是将(希望稍后)使用 CAN 引导加载程序的电路板)  我的目的是“积极地建立”您的 CAN 配置/连接是“可靠的”,如果有问题,它驻留在(仅限于) CAN 引导加载程序中。

    许多单独的组件构成了一个"链"-这介于您(现在)和您的 CAN 引导加载程序成功之间。     我的目的是系统地确定"真正有效的东西"、以便您的成功几率显著增加...   祝您好运...

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

    我已经验证了 CAN 硬件。 有一个示例程序将通过 CAN 进行通信、而不会出现任何问题。只要该示例程序激活引导加载程序、我就可以通过 CAN 总线对器件进行重新编程。 它不会仅在未加载该程序且引导加载程序配置 IO 时进行通信。 远程编程也适用于已进行的11位消息更改。 该代码在示例程序调用引导加载程序时和引导加载程序初始化时都是通用的。

    1M 尝试删除偏差。 示例代码在500kb 下成功、但如果我更改配置文件、如果引导加载程序配置 IO、则仍然没有通信。

    我一直在阅读 Tiva TM4C123GH6PM 微控制器数据表和 TivaWare 引导加载程序用户指南、以进行初始偏差和调试。 我能够添加将打开 LED 的代码、以确认引导加载程序正在到达等待编程消息的 while 循环。

    我一直在比较标准 Tivaware 库和引导加载程序源代码之间的差异。 我希望我可能会找到一些东西、告诉我我我设置的配置是否错误。

    再次感谢您的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否可以赞扬你的做法的细节和系统性质? 非常好。

    我注意到供应商代理的退货-似乎我现在最擅长"走路"那些"可能具有 CAN 引导加载程序的直接经验-和/或"内部细节"(通常(仅限)可供"内部人员使用)的人。

    至少、您的问题现在存在清晰/清晰的"数字"、以及您在努力实现其解决方案时所做的关键证明... 祝您有机会、我是 AMI……
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CAN 引导加载程序工作:
    已再次尝试使用默认的 serial_demo 以及示波器来监视 CAN 通信、而不是计算机上的应用。 已更改 bl_config.h:
    #define CAN_ENABLE_UPDATE

    #define CAN_RX_PERIPh SYSCTL_RCGC2_GPIOB
    #define CAN_RX_PORT GPIO_PORTB_BASE
    #define CAN_RX_PIN 4.
    #define CAN_RX_PIN_PCTL 8 //引脚的备用功能将被使用

    #define CAN_TX_PERIPh SYSCTL_RCGC2_GPIOB
    #define CAN_TX_PORT GPIO_PORTB_BASE
    #define CAN_TX_PIN 5.
    #define CAN_TX_PIN_PCTL 8 //要使用的引脚替代函数
    #define CAN_BIT_RATE 50000

    在 void UpdateerCAN()的 while 循环中对 BL_CAN.c 进行了额外的更改:
    //ui32Cmd = PacketRead (g_pui8CommandBuffer、\ui32Bytes);
    ui32Cmd = 0;

    这会发出一个可以在示波器上观察到的 ACK。 确认后、其余偏差重新添加到中、引导加载程序可以使用和不使用调用应用程序重新编程。 为了帮助其他人调试引导加载程序、以下是我对其中一个诊断 LED 的 GPIO 所做的寄存器编辑(尚未保存到所需的最低寄存器):

    extern void delay (uint32_t ui32Count);

    空 InitLED (空)

    //启用时钟
    HWREG (SYSCTL_RCC)&=~(SYSCTL_RCC_MOSCDIS);
    延迟(524288);
    HWREG (SYSCTL_RCC)=((HWREG (SYSCTL_RCC)&~(SYSCTL_RCC_OSCSRC_M)))|
    SYSCTL_RCC_OSCSRC_MAIN);

    //为 GPIO 基址启用系统控制。 (将 GPIOF 替换为您的 LED 基座)
    HWREG (SYSCTL_RCGCGPIO)|= SYSCTL_RCGC2_GPIOF;
    延迟(3);


    空 SetLED0 (空)

    ///0x04是数据表中引脚 PF2的位。 (将 PORTF 替换为 LED 基座、并将0x04替换为 Tivaware 库 GPIO.h 中的引脚值)

    //将驱动强度设置为2mA
    HWREG (GPIO_PORTF_BASE + GPIO_DR2R)=(HWREG (GPIO_PORTF_BASE + GPIO_DR2R)| 0x04);
    HWREG (GPIO_PORTF_BASE + GPIO_DR4R)=(HWREG (GPIO_PORTF_BASE + GPIO_DR4R)&~(0x04));
    HWREG (GPIO_PORTF_BASE + GPIO_DR8R)=(HWREG (GPIO_PORTF_BASE + GPIO_DR8R)&~(0x04));
    HWREG (GPIO_PORTF_BASE + GPIO_SLR)=(HWREG (GPIO_PORTF_BASE + GPIO_O_SLR)&~(0x04));

    //将引脚类型设置为数字使能(标准)
    HWREG (GPIO_PORTF_BASE + GPIO_O_ODR)=(HWREG (GPIO_PORTF_BASE + GPIO_O_ODR)&~(0x04));
    HWREG (GPIO_PORTF_BASE + GPIO_PUR)=(HWREG (GPIO_PORTF_BASE + GPIO_PUR)&~(0x04));
    HWREG (GPIO_PORTF_BASE + GPIO_PDR)=(HWREG (GPIO_PORTF_BASE + GPIO_PDR)&~(0x04));
    HWREG (GPIO_PORTF_BASE + GPIO_DEN)=(HWREG (GPIO_PORTF_BASE + GPIO_O_DEN)| 0x04);

    //禁用模拟功能
    HWREG (GPIO_PORTF_BASE + GPIO_AMSEL)=(HWREG (GPIO_PORTF_BASE + GPIO_AMSEL)&~(0x04));

    //设置方向
    HWREG (GPIO_PORTF_BASE + GPIO_DIR)=(HWREG (GPIO_PORTF_BASE + GPIO_DIR)| 0x04);//将调试 LED 配置为输出

    //设置模式
    HWREG (GPIO_PORTF_BASE + GPIO_AFSEL)=(HWREG (GPIO_PORTF_BASE + GPIO_PDR)&~(0x04));

    //将输出设置为高电平
    HWREG (GPIO_PORTF_BASE +(GPIO_O_DATA +(0x04 << 2)))= 0xFF;

    更新(2017年7月12日):

    确认 CAN 设置 和引导加载程序正确后, void UpdateerCAN()的 while 循环中的 BL_CAN.c 修改被删除并恢复到;


     ui32Cmd = PacketRead (g_pui8CommandBuffer、&ui32Bytes);

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

    很高兴注意到您的系统方法以及"推动成功"。

    遗憾地注意到(赦免)不必要且过于复杂的"DRM 协议"、而不是供应商的 API。

    此处的用户-尝试(任何)更改为"Init or Set"(Init 或 Set) LED (均仅在 DRM 中编码)-目标是"岩石"海岸线...   而且-由于这些代码块没有快速执行-也没有代码空间要求-选择 DRM (这会增加大量的时间/精力/复杂性)似乎没有什么优点...

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

    我同意这种方法过于复杂。 我不确定我的诊断代码是否应该调用 API、因为引导加载程序的其余部分执行了自定义寄存器编辑。 可以从引导加载程序调用 Tivaware 库吗?

    通常、我会坚持使用供应商 API、而不是直接编辑寄存器。

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

    [引用 user="L Eberhard"]是否可以从引导加载程序调用 Tivaware 库?[/quot]

    “希望”这是可以的!    (公司/我对该供应商的引导加载程序没有直接的经验-已迁移到 Cortex M7和 Cortex R-52 (适用于自主设计)。)

    我不想"继续"(进一步)、但我担心的是:您"发出 ACK 信号"。    虽然您有创意-这是否表明您的应用程序代码或硬件存在(部分)不一致或缺陷?   ((公司/我从未需要"垃圾邮件"此类信号-并且(大多数)严重投资者(和/或 VC)会在接受此类做法时"跑出去"。   (W/CB1"在他们的脚跟")

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

    哦、这仅用于调试目的。 确认设置正确后、我恢复了原始命令/响应。 spamming 测试旨在消除过滤掉传入命令的可能性。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚刚更新了我的答案、澄清了我删除了正常工作的引导加载程序的垃圾邮件编辑。 感谢 CB1_MOBILE 提醒您将其添加到中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="L Eberhard"]是否可以从引导加载程序调用 Tivaware 库?[/quot]

    API 只是操作寄存器(检查很简单)。 虽然某些呼叫可能会受到限制、但如果绝大多数呼叫都不能正常工作、我会感到惊讶。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    同意-应该注意的是、"no" API (甚至不是这个被允许的供应商提供的 API)提供了一个"完整的函数调用集。 (因此、为了满足(部分)要求-可能需要 DRM)