【ARM Coresight OpenOCD 系列 5.1 -- OpenOCD 无法识别CPUID 问题: xxx is unrecognized】

时间:2024-11-19 11:23:00


请阅读【嵌入式开发学习必备专栏】


文章目录

    • OpenOCD 无法识别CPUID 问题
      • ARM CPUID
      • CPUID 特性
      • CPUID 寄存器字段

OpenOCD 无法识别CPUID 问题

在使用OpenOCD 进行CPU debug的过程中有时会报出 无法识别CPUID的问题,本文将会介绍如何解决这个问题。首先我们来学习下什么是CPUID,以ARM Cortex-M 系列的Core为例进行介绍。

ARM CPUID

ARM 处理器的 CPUID 和 CPUID 基本寄存器是用于提供处理引擎(PE)识别信息的重要寄存器。这些寄存器帮助软件识别处理器的实现者、设备 ID 及其架构和版本等细节。以下是对 ARM CPUID 寄存器的详细说明。

CPUID 特性

  • 功能: 提供处理引擎(PE)的识别信息,包括设备的实现者代码和设备 ID 号。
  • 访问权限:
    • 该寄存器只能通过特权访问。非特权访问将产生一个错误。
    • 从 ARMv8.1-M 开始,当 DAUTHCTRL.UIDAPEN(任意银行)设置时,该寄存器可通过非特权 DAP 请求访问。

在这里插入图片描述

  • 实现与位置:
    • 32 位只读寄存器,位于地址 0xE000ED00
    • 安全软件可以通过 CPUID_NS(位于 0xE002ED00)访问该寄存器的非安全版本。对于在非安全状态和调试器中执行的软件,地址 0xE002ED00RES0(读取为零)。
    • 该寄存器在安全状态之间不进行切换。

CPUID 寄存器字段

  • Implementer, bits [31:24]:
    • 说明: 实现者代码。
    • 值及含义:
      • 0x41: ‘A’ - ARM Limited。
      • 0x41: 表示非 ARM Limited 的实现者。
    • 注意: ARM 可以分配未在手册中公布的代码。未被 ARM 分配的所有值均为保留值,不得使用。
  • Variant, bits [23:20]:
    • 说明: 变体编号。实现定义的变体编号。通常用于区分不同产品变体或产品的主要修订。
    • 值及含义: 作为实现定义值读取。
  • Architecture, bits [19:16]:
    • 说明: 定义处理引擎实现的架构。
    • 值及含义:
      • 0b1100: ARMv8-M 架构,无主扩展。
      • 0b1111: ARMv8-M 架构,带主扩展。
      • 其他所有值均为保留值。
  • PartNo, bits [15:4]:
    • 说明: 部件编号。实现定义的设备主要部件编号。
    • 值及含义: 作为实现定义值读取。
  • Revision, bits [3:0]:
    • 说明: 修订号。实现定义的设备修订号。
    • 值及含义: 作为实现定义值读取。

openocd/src/target/cortex_m.h 中对ARM Cortex-M 系列core 实现了CPUID的宏,如下:

#define CPUID		0xE000ED00

#define ARM_CPUID_IMPLEMENTOR_POS	24
#define ARM_CPUID_IMPLEMENTOR_MASK