解决 pyocd 在使用某些PACK 包烧录时由于提示 T bit in XPSR is invalid; the vector table may be invalid or corrupt 无法烧录的问题

解决 pyocd 在使用某些PACK 包烧录时由于提示 T bit in XPSR is invalid; the vector table may be invalid or corrupt 无法烧录的问题

直接原因是pyocd 在 cortex-m: reset_halt: just warn about invalid T-bit, don’t automatically fix 64d623a 这个补丁中不再
对XPSR.T 位的错误进行修复, 而是让用户去修复PACK 的错误

临时解决办法:

就是把修复 XPSR.T 的操作加回去😈
修改 python3.xx/site-packages/pyocd/coresight/cortex_m.py
在 _check_t_bit 函数中加上 self.write_core_register('xpsr', xpsr | self.XPSR_THUMB)
修改后如下

1
2
3
4
5
6
7
8
9
    def _check_t_bit(self):
        # Make sure the thumb bit is set in XPSR in case the reset handler
        # points to an invalid address. Only do this if the core is actually halted, otherwise we
        # can't access XPSR.
        if self.get_state() == Target.State.HALTED:
            xpsr = self.read_core_register_raw('xpsr')
            if xpsr & self.XPSR_THUMB == 0:
                self.write_core_register('xpsr', xpsr | self.XPSR_THUMB)
                LOG.warning("T bit in XPSR is invalid; the vector table may be invalid or corrupt")