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.

[参考译文] CC2530:在编写串行端口升级函数时、我发现程序可以从引导跳转到应用程序、但中断矢量表无法跳转、且它在不使用协议栈的情况下仍停留在引导的中断矢量处

Guru**** 2463330 points
Other Parts Discussed in Thread: CC2530, Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1202242/cc2530-when-making-the-serial-port-upgrade-function-i-found-the-program-could-jump-from-boot-to-app-program-but-the-interrupt-vector-table-was-unable-to-jump-and-it-still-stayed-at-the-interrupt-vector-of-boot-without-using-t

器件型号:CC2530
主题中讨论的其他器件: Z-stack

大家好、

我还使用了 sb-boot.xcl 和 CC2530-sb.xcl 配置文件。 我阅读了两篇文章、但仍然无法成功跳转。 我希望 您能提供一些建议。

此致、

Katherine

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

    您好、Katherine、

    请确保遵循  CC2530.pdf 串行引导加载程序指南中的所有步骤。  CC2530-sb.xcl 应该包括-Z (code) intvec=_code_start、并且需要从链接器命令文件 Project Options 中引用。  它们应引用输出映射文件和二进制映像以确认存储器放置正确、并使用调试器逐步执行代码并确定根本问题。

    此致、
    Ryan

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

    您好、 Ryan、

    您是否认为 EQU 地址必须等于 CODE_START 地址? 我不使用协议栈。 关于 CC2530.pdf 的串行引导加载程序、是否还需要配置校验和? 另外、现在我的跳转函数没问题、这证明了 bin 文件没有问题。 但是、中断矢量表无法跳转。 您能说明一下这个问题的原因吗?

    此致、
    Katherine

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

    您好、 Ryan、

    正如您建议的那样、 我 遵循了  CC2530.pdf 串行引导加载程序 指南中的所有步骤。  还 包括 z (code) intvec=_code_start。 您能否指定  应该使用调试器逐步执行哪些代码? 是应用程序的代码吗?

    此致、
    Katherine

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

    我并不是要求使用协议栈、但其资源就如何使用引导加载程序提供了充分的演示。  启动代码不使用中断、应用程序的*。s51偏移量应等于0x2000、与应用程序的*。xcl 代码启动相同。  诚然、很难用不正确的中断矢量表来调试 HWI。  您能否确认 ISR 函数正确放置在输出映射文件的 INTVEC 位置中?  例如、RESET_VECTOR 应为0x2000、halDmaISR 应为0x2043、halSleepTimerIsr 应为0x202B、等等  如果 一切看起来都正确、或者其他硬件中断(例如计时器或端口)按预期运行、这表明 UART 功能未正确建立。

    此致、
    Ryan

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

    CC2530如何设置中断矢量的偏移,interrupt_stumbs.s51无法工作。

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

    ,我是肯定的

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

    您好、Ryan、

    现在的问题是、我通过映射文件发现、启动的中断地址和应用程序的中断地址 是不同的。 理论上、 应该可以正常在应用中使用中断。 但是、如果我现在在应用程序中使用中断、它仍将跳到引导 、我不明白为什么。 此外、在我修改 interrupt_subs.s51文件后仍然得到相同的结果、包括修改偏移 EQU 的地址、但仍然不起作用。 我想知道是不是因为我在项目中没有链接这个 interrupt_subs.s51 、导致无法工作。 但我项目的配置选项与 TI 提供的标准文件完全相同、我无法弄清其中的缘由。 如果您能说明问题的原因、我将不胜感激。

    此致、
    Katherine

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

    引导和应用程序之间的中断地址不同意味着什么?  如果可能、请提供*。map 文件。  您无需修改从引导项目中获得的 interrupt_studs.s51。  引导加载程序配置中断映射。  确认 Project Options -> Linker -> Config 为您的应用程序引用了 CC2530-sb.xcl、并 将 sb-boot.xcl 用于引导。

    此致、
    Ryan

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

    您好、Ryan、

    如果 CC2530不使用协议栈的中断矢量表、它是否会从 BOOT 跳转到 APP? 升级功能似乎不好。

    此致、
    Katherine

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

    CC2530不一定要使用 Z-Stack 进行串行引导操作、但 Zigbee 示例针对串行引导的使用进行了优化。  您可以参考 hal_mcu.h 中的向量用法。

    //hal_mcu.h
    
    #define _PRAGMA(x) _Pragma(#x)
    #define HAL_ISR_FUNC_DECLARATION(f,v)   _PRAGMA(vector=v) __near_func __interrupt void f(void)
    #define HAL_ISR_FUNC_PROTOTYPE(f,v)     _PRAGMA(vector=v) __near_func __interrupt void f(void)
    #define HAL_ISR_FUNCTION(f,v)           HAL_ISR_FUNC_PROTOTYPE(f,v); HAL_ISR_FUNC_DECLARATION(f,v)
    

    并进一步了解如何与 Z-Stack 源的 Components\hal\target\CC2530EB 中的应用文件相对应。

    此致、
    Ryan