ST USB Host库USBH_HandleEnum()的一个bug

1 篇文章 0 订阅

USBH_HandleEnum()里定义了一个64字节的局部数组Local_Buffer[ ],并在获取厂商描述符、产品描述符和序列号的时候使用。但是使用的时候却认为最大可以用到0xff个字节。如果U盘的这3个字符串中任何一个超过64字节就会导致HardFault(我遇到一个U盘的序列号是120字节)。解决方法是把下图中3个0xff改为63,或者把Local_Buffer的容量从64改为256.

static USBH_Status USBH_HandleEnum(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost)
{
	USBH_Status Status = USBH_BUSY;
	uint8_t Local_Buffer[64];
	. . .
	case ENUM_GET_MFC_STRING_DESC:  
    	if (phost->device_prop.Dev_Desc.iManufacturer != 0)
    	{ /* Check that Manufacturer String is available */
    		if ( USBH_Get_StringDesc(pdev,
                               phost,
                               phost->device_prop.Dev_Desc.iManufacturer, 
                               Local_Buffer , 
                               0xff) == USBH_OK)
    . . .
    case ENUM_GET_PRODUCT_STRING_DESC:   
    	if (phost->device_prop.Dev_Desc.iProduct != 0)
    	{ /* Check that Product string is available */
    		if ( USBH_Get_StringDesc(pdev,
                               phost,
                               phost->device_prop.Dev_Desc.iProduct, 
                               Local_Buffer, 
                               0xff) == USBH_OK)
    . . .
    case ENUM_GET_SERIALNUM_STRING_DESC:   
    	if (phost->device_prop.Dev_Desc.iSerialNumber != 0)
    	{ /* Check that Serial number string is available */    
        	if ( USBH_Get_StringDesc(pdev, 
                               phost,
                               phost->device_prop.Dev_Desc.iSerialNumber, 
                               Local_Buffer, 
                               0xff) == USBH_OK)
     . . .
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值