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: 制作串口升级功能,程序可以从boot跳转到app程序,但是中断向量表一直跳不过去,还停留在boot的中断向量,没有使用协议栈

Part Number: CC2530
Other Parts Discussed in Thread: Z-STACK

我也都使用了sb-boot.xcl和cc2530-sb.xcl配置文件,参考了两篇文章,依然不能成功跳转,希望TI的工程师给个建议。

  • 已为您联系TI工程师,稍后给您回复

  • 请确保遵循 Serial Boot Loader for CC2530.pdf 中的所有步骤。 cc2530-sb.xcl 应包括Z(CODE)INTVEC=_CODE_START 并且需要从链接器命令文件项目选项中引用。您应参考输出映射文件和二进制图像以确认内存放置正确,并使用调试器逐步执行代码并找出根本问题。

  • 您说的是这个EQU地址要等于code_start地址么,我没有用协议栈, Serial Boot Loader for CC2530.pdf 那些checksum也需要配置么,还有就是现在我跳转功能是没问题的,就证明bin文件没问题,只是只有中断向量表跳不过去,您能给解答一下么

  • 您刚才说的,参照 Serial Boot Loader for CC2530.pdf 我已经确定完全参照,Z(CODE)INTVEC=_CODE_START也有,用调试器逐步执行什么的代码,app的么?

  • 已将您的最新回复发布到E2E英文论坛,您也可以访问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关注最新进展

  • 我不是要求使用协议栈,但是它的资源提供了关于如何使用bootloader的充分演示。boot代码不使用中断,应用程序的 *.s51 偏移量应等于 0x2000,与应用程序的 *.xcl 代码开始相同。不可否认,使用不正确的中断向量表来调试 HWI 是很困难的。您能否确认 ISR 函数已正确放置在输出映射文件中的 INTVEC 位置?例如,reset_vector 应为 0x2000,halDmaISR 为 0x2043,halSleepTimerIsr 为 0x202B 等。如果一切正常,或其他硬件中断(如定时器或端口)按预期运行,则表明 UART 功能未正确建立.

  • 现在的问题是,我通过map文件发现,boot的中断地址和application的中断地址是不一样的,那按理来说应该是可以正常在app里使用中断的,但是现在在app里使用中断依然会跳转到boot里,我不理解为什么。其次我发现我修改interrupt_subs.s51文件还是一样的结果,包括我修改OFFSET EQU的地址,依然不起作用,我在想,是不是因为我在工程中没有把这个interrupt_subs.s51链接进去导致他不起作用呢,但是我工程的配置选项都跟TI给的标准文件一摸一样,也找不出为什么,求解答

  • 现在的问题是,我通过map文件发现,boot的中断地址和application的中断地址是不一样的,那按理来说应该是可以正常在app里使用中断的,但是现在在app里使用中断依然会跳转到boot里,我不理解为什么。其次我发现我修改interrupt_subs.s51文件还是一样的结果,包括我修改OFFSET EQU的地址,依然不起作用,我在想,是不是因为我在工程中没有把这个interrupt_subs.s51链接进去导致他不起作用呢,但是我工程的配置选项都跟TI给的标准文件一摸一样,也找不出为什么,求解答

  • 您说的boot和应用程序之间的中断地址不同是什么意思?请尽可能提供 *.map 文件。您不需要修改从boot项目中获取的 interrupt_stubs.s51。bootloader配置中断映射。请确认 cc2530-sb.xcl 被 Project Options -> Linker -> Config for you application 引用并且 sb-boot.xcl 用于启动。

  • cc2530不用协议栈中断向量表是不是从boot跳转到app的,做升级功能好像不太行

  • 已为您联系TI工程师,一旦得到回复会立刻回复给您

  • CC2530 不必使用 Z-Stack 进行串行boot操作,但是 Zigbee 示例针对串行boot使用进行了优化。 向量的用法可以参考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里面的应用文件是如何对应的。