cmsis dap的实现, 改为无线通信方式
来源:互联网 发布:手机荧屏软件 编辑:程序博客网 时间:2024/06/06 02:14
CMSIS DAP在stm32f107上的实现
CMSIS DAP的简介
英文全称Firmwarefor CoreSight Debug Access Port, 顾名思义为调试接口固件, 基于此可以实现自己的仿真器, 协议开源, 商业免费, 无版权顾虑.
详情可参考http://www.keil.com/pack/doc/CMSIS/DAP/html/index.html
本文目的是构建自己的仿真器
如果有MDK pro的license可以参考官方配置方法, 配置处理器,IO口,USB外设, 应该可以实现仿真器的功能.
但是由于没有pro的license, 所以这里打算用 stm32的usb otg v2.2.0的库, 加上cmsis-dap的源码实现.
1. Stm32 usb otg库的使用
下载地址, ST官网 搜索usb, 在工具与软件项找到库文件及例程.
如图所示 STSW-STM32046 即为官方库文件. 官方工程为IAR, 这里因为我们用的是KEIL就需要把USB驱动,设备类驱动,用户层相关文件添加进自己的工程,并添加响应的头文件. 如下图.
根据CMSIS-DAP要求采用的是USB HID类设备, 设备描述符,也根据官方配置要求设置, 报告描述符见下图.
Stm32 usb库中 drivers文件夹内为与硬件相关的操作, device为与设备类相关的操作, user文件夹内为与板级相关及用户app回调函数和标准描述符文件.
移植过程中drivers文件夹不需要修改, device文件夹只需要修改类相关文件也就是hid_core文件, 主要修改部分为描述符, 及操作结构体内的 DATA_INDATA_OUT函数.
在这里要稍微描述下usbotg的库, usb库初始化后, 调用USBD_Init(…)函数,注册一些列函数, 最主要的是类相关回调函数. 这个结构体会在usb在中断产生后收到请求时将非usb标准请求传给类相关的函数. 也就是usbd_customhid_core.c文件. 因为考虑到后续会将仿真器改造成无线仿真器,在这里我主要在类相关回调函数中调用自己的接口函数.
最主要的结构体:
typedef struct _Device_cb
{
uint8_t (*Init) (void *pdev ,uint8_t cfgidx);
uint8_t (*DeInit) (void *pdev ,uint8_t cfgidx);
/* Control Endpoints*/
uint8_t (*Setup) (void *pdev ,USB_SETUP_REQ *req);
uint8_t (*EP0_TxSent) (void *pdev);
uint8_t (*EP0_RxReady) (void *pdev);
/* Class Specific Endpoints*/
uint8_t (*DataIn) (void *pdev ,uint8_t epnum);
uint8_t (*DataOut) (void *pdev ,uint8_t epnum);
uint8_t (*SOF) (void *pdev);
uint8_t (*IsoINIncomplete) (void *pdev);
uint8_t (*IsoOUTIncomplete) (void*pdev);
uint8_t *(*GetConfigDescriptor)( uint8_t speed , uint16_t *length);
#ifdef USB_OTG_HS_CORE
uint8_t *(*GetOtherConfigDescriptor)( uint8_t speed , uint16_t *length);
#endif
#ifdefUSB_SUPPORT_USER_STRING_DESC
uint8_t *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index, uint16_t *length);
#endif
}USBD_Class_cb_TypeDef;
我主要实现了3个函数, Init, DataIn, DataOut.
Init中完成一些数据的初始化, 并使能预接收.
DataOut 发送信号给处理线程, 再次使能预接收.
In中查看是否有待发送数据,有则发送.
处理线程中调用DAP协议处理信号.
后续将完成无线部分改造.
- cmsis dap的实现, 改为无线通信方式
- 高速USB 2.0的CMSIS-DAP调试器:CMSIS-DAP正确打开方式(3月18日更新速度和稳定性)
- CMSIS-DAP和OpenSDA的关系
- CMSIS-DAP - Probe not found
- 尝试基于 CMSIS-DAP 的无线调试器(施工中)
- 【经验分享】如何将LPCXpresso的仿真器烧录成CMSIS-DAP或JLINK?
- [经验分享]如何将LPCXpresso的仿真器烧录成CMSIS-DAP或JLINK
- ARM CMSIS DAP源码分析(一)
- ARM CMSIS DAP源码分析(二)
- 开源OpenSDA烧写CMSIS-DAP
- STM32高级开发(16)-CMSIS DAP调试工程
- CMSIS PACK的安装
- listctrl改为排序的实现
- CMSIS
- CMSIS
- CMSIS
- 将NS2改为plugin方式的尝试
- 使用ZigBee模块实现PC机与树莓派的无线通信
- 高度自适应的ViewPager--SelfAdaptingViewPager
- yii2 activefrom常用input框样式
- 15个良好的编程习惯
- Datatlble常用小例子
- jqgrid总结,使用过程中的一些配置信息的记录
- cmsis dap的实现, 改为无线通信方式
- ReadMoreTextView
- Windows下编译运行DPM(Discriminatively trained deformable part models)
- msql库操作用户权限连接数据库
- Easy Problem VI
- Android 颜色透明度换算
- 微软双拼
- 斐波纳契数列分析和实现
- 内存对齐