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寄存器,如下图:
d)最后两个用于推动比较和推动验证操作(Pushed compare and pushed verify)
先写这么多,后面慢慢写
0 0
- ARM CMSIS DAP源码分析(一)
- ARM CMSIS DAP源码分析(二)
- CMSIS-DAP - Probe not found
- CMSIS-DAP和OpenSDA的关系
- 开源OpenSDA烧写CMSIS-DAP
- cmsis dap的实现, 改为无线通信方式
- arm,dap,fpga
- STM32高级开发(16)-CMSIS DAP调试工程
- 高速USB 2.0的CMSIS-DAP调试器:CMSIS-DAP正确打开方式(3月18日更新速度和稳定性)
- arm mmu源码分析
- 尝试基于 CMSIS-DAP 的无线调试器(施工中)
- 【经验分享】如何将LPCXpresso的仿真器烧录成CMSIS-DAP或JLINK?
- [经验分享]如何将LPCXpresso的仿真器烧录成CMSIS-DAP或JLINK
- ARM CMSIS DSP库函数arm_sin_cos_f32的BUG
- CMSIS
- CMSIS
- CMSIS
- arm 汇编语言源码文件分析
- java笔记(三)[java中的继承&java中的方法重载,重写,重构&java中的向上转型和乡下转型&java中的抽象类和接口&java中的接口向上转型]
- ASP.NET每一个页面首次访问超级慢
- poj 2253 Frogger
- 关于UIView的坐标转换以及好用方法
- 机器人的运动范围
- ARM CMSIS DAP源码分析(一)
- php_xdebug安装+NetBeans的配置和使用
- 使用 Sublime Text 3
- 中科院分词系统整理笔记
- AVL平衡二叉树
- 动态规划_DAG例题_A Spy in the Metro(UVA1025)
- 移动拼图游戏(八数码问题)A*版
- Linux下的sort命令解析
- html 禁止input文本框输入实现属性