ARM CMSIS DAP源码分析(一)

来源:互联网 发布:陈子豪淘宝外设店网址 编辑:程序博客网 时间:2024/05/16 18:10

结合ARM文档ADIv5,分析一下ARM提供的CMSIS DAP的开源代码,写点个人心得。

1.USB的整个传输有2个全局变量二维数组用作缓冲区,如下:

static          uint8_t  USB_Request [DAP_PACKET_COUNT][DAP_PACKET_SIZE];  // Request  Bufferstatic          uint8_t  USB_Response[DAP_PACKET_COUNT][DAP_PACKET_SIZE];  // Response Buffer

分别是输入缓冲和输出缓冲,固件从上位机接收数据后都会存放在这两个缓冲区,之后才会对缓冲区中的数据慢慢进行处理。

2.大概分析了一下SWD通信协议下,USB请求的结构被定义成为uint8_t类型的数组:
1)Request[0]:DAP Command IDs,该变量取值为

/* DAP Command IDs */#define ID_DAP_Info                     0x00#define ID_DAP_LED                      0x01#define ID_DAP_Connect                  0x02#define ID_DAP_Disconnect               0x03#define ID_DAP_TransferConfigure        0x04#define ID_DAP_Transfer                 0x05#define ID_DAP_TransferBlock            0x06#define ID_DAP_TransferAbort            0x07#define ID_DAP_WriteABORT               0x08#define ID_DAP_Delay                    0x09#define ID_DAP_ResetTarget              0x0A#define ID_DAP_SWJ_Pins                 0x10#define ID_DAP_SWJ_Clock                0x11#define ID_DAP_SWJ_Sequence             0x12#define ID_DAP_SWD_Configure            0x13#define ID_DAP_JTAG_Sequence            0x14#define ID_DAP_JTAG_Configure           0x15#define ID_DAP_JTAG_IDCODE              0x16

2)Request[1]:DAP Index;该字段在ID_DAP_Transfer命令中会被忽略
3)Request[2]:request_count;该字段表示当前请求的数量
4)Request[3]:request_value;该字段的含义比较多

/* DAP Transfer Request */#define DAP_TRANSFER_APnDP              (1<<0)#define DAP_TRANSFER_RnW                (1<<1)#define DAP_TRANSFER_A2                 (1<<2)#define DAP_TRANSFER_A3                 (1<<3)#define DAP_TRANSFER_MATCH_VALUE        (1<<4)#define DAP_TRANSFER_MATCH_MASK         (1<<5)

该字段在SWD传输协议中也很重要,分别用于表示
a)访问AP/DP(1为AP操作)
b)读操作/写操作(1为读操作)
c)A2,A3表示两个bit,用于确定AP或者DP中的具体寄存器,在确定寄存器时,Bits [1:0]一直都是0b00,例如,在DP访问时,[A3:A2] = 0b10,那么代表访问的寄存器偏移就是[A3:A2]+Bits [1:0] = 0b1000 = 0x08,根据ARM手册,该地址应该是SELECT寄存器,如下图:
DP端口寄存器描述
d)最后两个用于推动比较和推动验证操作(Pushed compare and pushed verify)

先写这么多,后面慢慢写

0 0
原创粉丝点击