WCH沁恒单片机
直播中

张玉珍

7年用户 971经验值
私信 关注
[问答]

请问CH573 USB Device怎么分包发送descriptor?

#include "CH57x_common.h"



UINT8 TxBuff[] = "This is a tx examrn";

UINT8 RxBuff;

UINT8 trigB;



int main()

{

UINT8 len;



SetSysClock( CLK_SOURCE_PLL_60MHz );



/* 配置串口1:先配置IO口模式,再配置串口 */

GPIOA_SetBits( GPIO_Pin_9 );

GPIOA_ModeCfg( GPIO_Pin_8, GPIO_ModeIN_PU );// RXD-配置上拉输入

GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA ); // TXD-配置推挽输出,注意先让IO口输出高电平

UART1_DefInit();





while( 1 )

{

len = UART1_RecvString( RxBuff );

if ( RxBuff[0]==0xaa&&RxBuff[1]==0xc0)

{

UART1_SendString( RxBuff, len );

}

}



}
刚刚
由于我需要传 BOS Descriptor 的内容,Microsoft OS 2.0 descriptor 长达 178 字节,但是我每次只能发送 64字节

我参考了官方示例的 USB 中断处理函数,其中

else
{
if ( chtype & 0x80 ) // 上传
{
len = ( SetupReqLen > DevEP0SIZE ) ?
DevEP0SIZE : SetupReqLen;
SetupReqLen -= len;
}
else
len = 0; // 下传
R8_UEP0_T_LEN = len;
R8_UEP0_CTRL = RB_UEP_R_TOG | RB_UEP_T_TOG | UEP_R_RES_ACK | UEP_T_RES_ACK; // 默认数据包是DATA1
}
这里会将 len 设置成 64 (DevEp0Size),期望的是 Host 继续发同样的请求,并且 pSetupReqPak->wLength 为 178 - 64,但这并没有发生,我这里是不是做错了,需要怎么分包发送呢?




回帖(1)

罗兰君

2022-9-5 09:50:21
在端点0 的in会继续发送吧 直到发完
举报

更多回帖

发帖
×
20
完善资料,
赚取积分