历史上的今天
今天是:2024年10月30日(星期三)
2020年10月30日 | STM32 usb_core.c分析
2020-10-30 来源:eefocus
usb_core.c这个c文件是个庞大的文件,主要是定义了usb2.0的标注协议处理函数。
下面是这个文件的所有函数:
/*******************************************************************************
* Function Name : Standard_GetConfiguration.
* Description : 返回当前配置变量的地址
* Input : Length -需要的字节 How many bytes are needed.
* Output : None.
* Return : 如果'Length'值为0时,请求无效,返回1。长度不为0时,返回配置变量的地址
* Readme : 当配置值与摸个配置描述符中的配置编号一致时,表示选中该配置
*******************************************************************************/
uint8_t *Standard_GetConfiguration(uint16_t Length);
/*******************************************************************************
* Function Name : Standard_SetConfiguration.
* Description : 该函数用于设置配置值,主机发送该请求后,usb设备要配置自己的设备值
* Input : None.
* Output : None.
* Return : 当该请求被执行了,返回USB_SUCCESS
* 当请求无效时,然会USB_UNSUPPORT
*******************************************************************************/
RESULT Standard_SetConfiguration(void);
/*******************************************************************************
* Function Name : Standard_GetInterface.
* Description : 返回当前接口的备用接口
* Input : Length -需要的字节数
* Output : None.
* Return : 当'Length'的值为0,请求无效,返回0,当长度不为0,返回备用接口的地址
*******************************************************************************/
uint8_t *Standard_GetInterface(uint16_t Length);
/*******************************************************************************
* Function Name : Standard_GetStatus.
* Description : 拷贝设备请求数据到"StatusInfo buffer".
* Input : - Length -需要的字节数
* Output : None.
* Return : 如果请求在数据块的末端,或则当'Length'为0是,请求无效,则返回0
*******************************************************************************/
uint8_t *Standard_GetStatus(uint16_t Length);
/*******************************************************************************
* Function Name : Standard_ClearFeature.
* Description : 清除或禁止某个指定的特性
* Input : None.
* Output : None.
* Return : 当请求被执行,返回Return USB_SUCCESS,如果请求无效,返回USB_UNSUPPORT
*******************************************************************************/
RESULT Standard_ClearFeature(void);
/*******************************************************************************
* Function Name : Standard_SetEndPointFeature
* Description : 设置或使能端点的指定的特性
* Input : None.
* Output : None.
* Return : 如果请求被执行,返回USB_SUCCESS,如果请求无效,则返回USB_UNSUPPORT
*******************************************************************************/
RESULT Standard_SetEndPointFeature(void);
/*******************************************************************************
* Function Name : Standard_SetDeviceFeature.
* Description : 设置或使能设备指定的特性
* Input : None.
* Output : None.
* Return : 如果请求被执行,返回USB_SUCCESS,如果请求无效,则返回USB_UNSUPPORT
*******************************************************************************/
RESULT Standard_SetDeviceFeature(void);
/*******************************************************************************
* Function Name : Standard_GetDescriptorData.
* Description : Standard_GetDescriptorData用于描述符的传输.
* : 这个函数用于驻留在flash或RAM里的描述符pDesc可以自相Flash或RAM
* 这个函数的目的是具有不同的方式去响应描述符请求。
* 它允许用户通过软件生成的某些描述符或则读取外部存储设备的描述符部分.
* Input : Length - 这次传输的的数据长度
* pDesc - 指向描述符结构体的指针
* Output : None.
* Return : 返回usb_wOffset指向的描述符部分的地址。这个地址指向的缓冲包含最起码Length个字节
*******************************************************************************/
uint8_t *Standard_GetDescriptorData(uint16_t Length, ONE_DESCRIPTOR *pDesc);
/*******************************************************************************
* Function Name : DataStageOut.
* Description : 数据阶段的控制写传输
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void DataStageOut(void);
/*******************************************************************************
* Function Name : DataStageIn.
* Description : 数据阶段的控制读传输
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void DataStageIn(void);
/*******************************************************************************
* Function Name : NoData_Setup0.
* Description : 处理没有数据阶段的建立请求
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void NoData_Setup0(void);
/*******************************************************************************
* Function Name : Data_Setup0.
* Description : 处理有数据阶段的建立请求
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void Data_Setup0(void);
/*******************************************************************************
* Function Name : Setup0_Process
* Description : 建立阶段的数据处理Get the device request data and dispatch to individual process.
* Input : None.
* Output : None.
* Return : Post0_Process.
*******************************************************************************/
uint8_t Setup0_Process(void);
/*******************************************************************************
* Function Name : In0_Process
* Description : 处理默认端点的所有IN令牌包
* Input : None.
* Output : None.
* Return : Post0_Process.
*******************************************************************************/
uint8_t In0_Process(void);
/*******************************************************************************
* Function Name : Out0_Process
* Description : 处理默认端点上的所有OUT令牌包
* Input : None.
* Output : None.
* Return : Post0_Process.
*******************************************************************************/
uint8_t Out0_Process(void);
/*******************************************************************************
* Function Name : Post0_Process
* Description : 为防止错误,停止端点0Stall the Endpoint 0 in case of error.
* Input : None.
* Output : None.
* Return : 如果控制状态是PAUSE,返回0;如果不是返回1
*******************************************************************************/
uint8_t Post0_Process(void);
/*******************************************************************************
* Function Name : SetDeviceAddress.
* Description : 设置设备和所有使用过的端点地址
* Input : Val:设备地址
* Output : None.
* Return : None.
*******************************************************************************/
void SetDeviceAddress(uint8_t Val);
/*******************************************************************************
* Function Name : NOP_Process
* Description : 没有处理函数
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void NOP_Process(void);
这里简单地介绍几类函数。
首先要将的是关于USB特性(Feature)和状态的函数,这些函数包括:Standard_SetEndPointFeature();Standard_SetDeviceFeature;Standard_ClearFeature();Standard_GetStatus();这四个函数。
先讲讲 USB的Feature。对于USB的设备来说,特性就是否支持远程唤醒;如果是 对于USb的端点来说,端点是否有效(打开)就是端点的特性。
在 Standard_SetDeviceFeature函数中就是设置usb支持远程唤醒。
/*******************************************************************************
* Function Name : Standard_SetDeviceFeature.
* Description : 设置或使能设备指定的特性
* Input : None.
* Output : None.
* Return : 如果请求被执行,返回USB_SUCCESS,如果请求无效,则返回USB_UNSUPPORT
*******************************************************************************/
RESULT Standard_SetDeviceFeature(void)
{
SetBit(pInformation->Current_Feature, 5); //置位Current_Feature的D5,即支持远程唤醒
pUser_Standard_Requests->User_SetDeviceFeature(); //调用User_SetDeviceFeature(),该函数在usb_prop.c中注册
return USB_SUCCESS;
}
在 Standard_SetEndPointFeature()函数中就是停止(STALL)输入端点或则输出端点。
RESULT Standard_SetEndPointFeature(void)
{
uint32_t wIndex0;
uint32_t Related_Endpoint;
uint32_t rEP;
史海拾趣
|
sja1000,ep9307,can通信驱动,连续接收4帧后,第5帧,经常丢失 os:wince5.0 cpu:ep9307 200MHz CAN:sja1000 ------------------------- 我现在用的是一块工控板,直接用的别人给的nk.bin,有can的驱动源码 我在wince里做应用,发现别人连续发送5帧的话,大部分情况下,只能接收到前4帧。 我做了个测试 ...… 查看全部问答> |
|
接到一个项目,主要功能是用串口接传感器,收发数据,进行数据管理这样一个软件。要求在PC和wince设备上运行。我没有做过CE的项目,不知道是应该做一个程序在2个环境都能正常运行好呢,还是分别各做一个。用VC还是C#好。请路过的朋友给点建议好吗, ...… 查看全部问答> |
|
我很喜欢搞软件 又对硬件很痴迷 现在才刚起步 不知道自己到底往哪个方向发展 从小就喜欢做东西 现在对软件开发又爱不释手 最重要是 现在软件硬件都不是很好 也不晓得自己更偏向于哪个方面! 迷茫啊 ~~~各位给点建议,好不好?~~~ … 查看全部问答> |




