关于USB的总结
来源:互联网 发布:北京淘宝的地方在哪里 编辑:程序博客网 时间:2024/05/14 14:54
现在应用到的USB主要有3种:
1、interrupt模式下上位机下发给嵌入式设备命令:
嵌入式软件处理数据的相关代码如下:
USBD_CUSTOM_HID_ItfTypeDef USBD_CustomHID_fops_FS =
{
CUSTOM_HID_ReportDesc_FS,
CUSTOM_HID_Init_FS,
CUSTOM_HID_DeInit_FS,
CUSTOM_HID_OutEvent_FS,
};
static int8_t CUSTOM_HID_OutEvent_FS (uint8_t* event_idx);
解决数据来源的问题,库里的代码只能取到两个字节的命令,可以通过修改代码取多个字节,修改如下:
USBD_ClassTypeDef USBD_CUSTOM_HID =
{
USBD_CUSTOM_HID_Init,
USBD_CUSTOM_HID_DeInit,
USBD_CUSTOM_HID_Setup,
NULL, /*EP0_TxSent*/
USBD_CUSTOM_HID_EP0_RxReady, /*EP0_RxReady*/ /* STATUS STAGE IN */
USBD_CUSTOM_HID_DataIn, /*DataIn*/
USBD_CUSTOM_HID_DataOut,
NULL, /*SOF */
NULL,
NULL,
USBD_CUSTOM_HID_GetCfgDesc,
USBD_CUSTOM_HID_GetCfgDesc,
USBD_CUSTOM_HID_GetCfgDesc,
USBD_CUSTOM_HID_GetDeviceQualifierDesc,
};
标红的部分为接受USB数据的函数
static uint8_t USBD_CUSTOM_HID_DataOut (USBD_HandleTypeDef *pdev,
uint8_t epnum)
{
USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef*)pdev->pClassData;
// ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->OutEvent(hhid->Report_buf[0],
// hhid->Report_buf[1]);
((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->OutEvent(hhid->Report_buf);
USBD_LL_PrepareReceive(pdev, CUSTOM_HID_EPOUT_ADDR , hhid->Report_buf,
USBD_CUSTOMHID_OUTREPORT_BUF_SIZE);
return USBD_OK;
}
对应的上位机源码处理函数如下:
UCHAR Out_Data[5]={0x02,0x00};
int ret;
Out_Data[1] = 0x06;//Red on
Out_Data[2] = 0x01;
Out_Data[3] = 0x01;
ret = usb_interrupt_write(g_udev[0],0x01,(char *)Out_Data,5,500);
调用红色字体的函数来发送这个类型的命令。
2、往上位机上加载读取的数据
static uint8_t USBD_CUSTOM_HID_Setup (USBD_HandleTypeDef *pdev,
USBD_SetupReqTypedef *req)
这个函数下的下面就是读取的值
case CUSTOM_HID_REQ_GET_REPORT: //Virgo
ProcessReqFromPC(hhid->Send2PCReport_buf,(uint8_t)(req->wValue)&0x00FF);
USBD_CtlSendData(pdev,hhid->Send2PCReport_buf,(uint8_t)(req->wLength));
break;
#define CUSTOM_HID_REQ_GET_REPORT 0x01
上位机代码
int ret;
char In_Data[64] = {0x00};
ret = usb_control_msg(g_udev[0],0xA1,0x01,0x0301,0x0000,In_Data,64,1000);
0x01,对应的是CUSTOM_HID_REQ_GET_REPORT
0x0301 为命令
3、在上位机上写入嵌入式中数据
USBD_ClassTypeDef USBD_CUSTOM_HID =
{
USBD_CUSTOM_HID_Init,
USBD_CUSTOM_HID_DeInit,
USBD_CUSTOM_HID_Setup,
NULL, /*EP0_TxSent*/
USBD_CUSTOM_HID_EP0_RxReady, /*EP0_RxReady*/ /* STATUS STAGE IN */
USBD_CUSTOM_HID_DataIn, /*DataIn*/
USBD_CUSTOM_HID_DataOut,
NULL, /*SOF */
NULL,
NULL,
USBD_CUSTOM_HID_GetCfgDesc,
USBD_CUSTOM_HID_GetCfgDesc,
USBD_CUSTOM_HID_GetCfgDesc,
USBD_CUSTOM_HID_GetDeviceQualifierDesc,
};
case CUSTOM_HID_REQ_SET_REPORT:
g_req = req;
hhid->IsReportAvailable = 1;
USBD_CtlPrepareRx (pdev, hhid->Report_buf, (uint8_t)(req->wLength));
#define CUSTOM_HID_REQ_SET_REPORT 0x09
对应的上位机
ret = usb_control_msg(g_udev[0],0x21,0x09,0x0302,0x0000,Out_Data,20,1000);
数据USBcontrol类型
- 关于USB的总结
- 关于Android usb host 总结
- 关于Android usb host 总结
- 关于android USB Host编程的一些总结
- 关于android USB Host编程的一些总结
- 关于usb的文档
- usb相关的总结
- 2440的usb总结
- USB 协议的完美总结
- 总结:关于使用ffmpeg video4linux2 打开usb摄像头流的失败过程排查
- USB基础与重点梳理—关于USB的问题
- USB学习总结1—s3c6410的USB驱动修改
- usb总结
- USB总结
- 关于USB无线网卡的实现
- 关于Uboot的USB下载功能
- 关于usb client 转串口的BUG
- STM32关于USB的相关寄存器
- python中xrange和range的异同
- 聊一聊WEB中的路径问题
- C#委托的介绍(delegate、Action、Func、predicate)ga
- 银联全渠道平台接入B2C网关支付
- Android开发之蓝牙通信
- 关于USB的总结
- 随便写一些
- python 如何在一个for循环中遍历两个列表
- tpshop商城
- jsonrpc 规范
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- Broadcast Receiver
- 使用Sublime Text作为Markdown编辑器
- 虚拟内存与物理内存