1. ARM Angel Debug Protocol (ADP) 技术解析
在嵌入式系统开发领域,调试协议是连接开发环境与目标硬件的关键纽带。ARM Angel Debug Protocol(ADP)作为ARM体系架构下的核心调试协议,其设计哲学体现了嵌入式调试的特殊需求——既要保证实时性,又要适应资源受限的环境。
1.1 协议架构与通信模型
ADP采用客户端-服务器模型,其中:
- **调试器(Host)**作为客户端发起请求
- **目标设备(Target)**上的Angel调试代理作为服务端响应
协议栈分为三层:
- 物理层:支持多种传输介质(JTAG/SWD/串口)
- 数据链路层:处理数据包校验和重传
- 应用层:实现RPC调用语义
c复制// 典型ADP数据包结构示例
typedef struct {
uint32_t channel_id; // 通道标识(CI)
uint32_t reason_code; // 原因码
uint32_t seq_num; // 序列号
uint8_t payload[]; // 可变长度数据
} ADP_Packet;
1.2 通道与消息机制
ADP定义了多逻辑通道实现功能隔离:
| 通道类型 | 标识符(CI) | 主要功能 |
|---|---|---|
| 启动通道 | 0x0001 | 设备初始化、参数协商 |
| 主机调试通道 | 0x0002 | 断点设置、内存访问等调试操作 |
| 目标调试通道 | 0x0003 | 目标向主机发送调试事件通知 |
| 通信通道 | 0x0004 | 半主机(Semihosting)文件操作 |
消息处理流程:
- 主机发送请求包(Reason Code < 0x80000000)
- 目标设备返回响应包(Reason Code | 0x80000000)
- 错误时返回ADP_HADPUnrecognised(原因码0)
关键细节:序列号机制确保数据包有序传输,超时重传时间建议设置为150-300ms,具体值需根据传输介质调整
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心调试功能实现
2.1 内存访问操作
ADP提供多粒度内存访问方法:
python复制# 内存读取操作流程示例
def adp_read_memory(address, size, access_type):
if
