历史上的今天
今天是:2024年10月16日(星期三)
2020年10月16日 | USB开发库STSW-STM32121文件分析
2020-10-16 来源:eefocus

hw_config.c: 该文件中包含系统配置的函数。
usb_desc.c:各种描述符
usb-endp.c:就两个函数分别处理端点1的IN和端点2的OUT。
usb_istr.c: 该文件中只有一个函数,即 USB 中断的 USB_Istr 函数,该函数对各类引起 USB 中断的事件作轮询处理。
usb_prop.c:每个特定类下应用相关的处理函数,例如初始化、 SETUP 包、 IN 包、 OUT 包等等。

usb_pwr.c: 该文件中包含处理上电、调电、挂起和恢复事件的函数。
stm32it.c: 该文件中包含 USB 中断服务程序,由于 USB 中断有很多情况,这里的中断服务程序只是调用 usb_Istr.c 文件中的 USB_Istr 函数,由 USB_Istr 函数再做轮询处理。
usb_bot.c:是一个非常重要的源文件,可以说是大容量设备类的主要工作是由它完成的。bot的意思是BULk-only type,在近批量传输协议下,命令的传送也是有批量端点完成的。
usb_scsi.c:主要是实现具体UFI命令的处理,像读扇区、写扇区、读容量等命令的处理过程都是在这里完成的。
usb_mem.c: 主要实现两个函数:
UserToPMABufferCopy:把用户缓冲区中的内容拷贝到硬件缓冲区,这个显然是在发送数据
PMAToUserBufferCopy:把硬件缓冲区中的内容拷贝到用户缓冲区,这个显然是在接收数据
/*******************************************************************************
* Function Name : UserToPMABufferCopy
* Description : Copy a buffer from user memory area to packet memory area (PMA)
* Input : - pbUsrBuf: pointer to user memory area.
* - wPMABufAddr: address into PMA.
* - wNBytes: no. of bytes to be copied.
* Output : None.
* Return : None .
*******************************************************************************/
void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
{
uint32_t n = (wNBytes + 1) >> 1; /* n = (wNBytes + 1) / 2 */
uint32_t i, temp1, temp2;
uint16_t *pdwVal;
pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr);
for (i = n; i != 0; i--)
{
temp1 = (uint16_t) * pbUsrBuf;
pbUsrBuf++;
temp2 = temp1 | (uint16_t) * pbUsrBuf << 8;
*pdwVal++ = temp2;
pdwVal++;
pbUsrBuf++;
}
}
/*******************************************************************************
* Function Name : PMAToUserBufferCopy
* Description : Copy a buffer from user memory area to packet memory area (PMA)
* Input : - pbUsrBuf = pointer to user memory area.
* - wPMABufAddr = address into PMA.
* - wNBytes = no. of bytes to be copied.
* Output : None.
* Return : None.
*******************************************************************************/
void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
{
uint32_t n = (wNBytes + 1) >> 1;/* /2*/
uint32_t i;
uint32_t *pdwVal;
pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr);
for (i = n; i != 0; i--)
{
*(uint16_t*)pbUsrBuf++ = *pdwVal++;
pbUsrBuf++;
}
}
usb_sil.c:这个文件主要是简单接口层的初始化,和端点的读写操作函数。总共有3个函数:USB_SIL_Init();USB_SIL_Write();USB_SIL_Read()。
移植的话USB-FS-Device_Driver无需修改,只需要修改user下的文件即可,

端点0固定用于控制传输,endpoint0 的setup 包处理函数setup0_process()

史海拾趣
|
主要针对高精度测量类的AD. 1:参考电压需要足够精确,推荐使用外部高精准参考电压. 2:如果PGA可调,增益系数一般是越小噪声越低. 3:一般最好用到满量程,此时AD精度不浪费. 4:如果有偏置,需要进行自校. 5:请注意在使用DEMO板调试时,会由调试口导入 ...… 查看全部问答> |
|
DRAM,动态随机存取存储器,需要不断的刷新,才能保存数据。 而且是行列地址复用的,许多都有页模式。 SRAM,静态的随机存取存储器,加电情况下,不需要刷新,数据 不会丢失,而且,一般不是行列地址复用的。 SDRAM,同步的DRAM,即数据的 ...… 查看全部问答> |
|
有时免不了画个图或自己造字什么的,书中给出的技巧真妙。。。 #define X )*2+1 #define _ )*2 #define S ((((((((0 //8X8 //#define S ((((((((((((((((0 //16X16 定义一个数组: static unsigned short ItWhatXXX[]={ S _ _ _ _ _ _ _ _ ...… 查看全部问答> |
|
S3c2410中做wince 的SD卡驱动,sd 的主控制器中有个fifo的状态寄存器,但是硬件并没有提供fifo啊,这个fifo是用软件实现的,就是在pRequest的数据结构中定义了一上buffer指针,那么,这个buffer指针是如何能够影响到这个fifo的状态寄存器的呢?请高 ...… 查看全部问答> |
|
我的Data abort错误如下 Data Abort: Thread=8f9f2400 Proc=8e026d90 \'Radio1.exe\' AKY=00000041 PC=03f96480 RA=03f953a0 BVA=0e380030 FSR=00000007 在网上看到的错误PC值都有偏移量,这个怎么在MAP文件里定位啊?… 查看全部问答> |
|
南京瀚之显电子科技有限公司是一家专注于分布式无线传感网及其测控系统核心技术研发与产品应用的高科技企业。瀚之显拥有系列无线传感网核心技术和相关知识产权,包括U-Net网络协议栈、中短距离2.4G/780M无线模块、各类无线数采仪、WSN无线网关单元 ...… 查看全部问答> |
|
LM3S6918 Jtag/SW ,调试出现 Selected SWO Clock is not Supported LM3S6918 自己做的板子,插上JLink 后, 可以在jtag 和SW模式都可以读到CPU core。 也可以download程序到CPU flash。 但是在SW模式下一Dubeg,就跳出来 Selected SWO Clock is not Supported。 我把SW的MAX 时钟从5KHz 到10M ...… 查看全部问答> |
|
有没有谁装了CCS4啊,我的msp430g2231.h被覆盖了 给个msp430g2231.h我撒,刚不小心覆盖了,网上竟然找不到,谢啦 [ 本帖最后由 haphard 于 2011-12-1 14:59 编辑 ]… 查看全部问答> |




