------禁止转载-------
CH56x_usb30_LIB.h
个人使用中的理解,可能有些地方不对,USB3.0芯片独苗一个,花点时间弄弄明白、、、、、、、
1、
void USB30_Device_forceclr(void);
用于清除USBSS控制器内部状态,被USB30D_init
函数固定调用。
参数:无
返回值:无返回值
2、
UINT8 USB30_Device_Init(void);
用于初始化整个USBSS控制器,包括模块上电,被USB30D_init
函数固定调用。
返回值:
1-初始化失败
0-初始化成功
3、
UINT8 USB30_Lib_Getversion(void);
用于获取USBSS函数库版本号。
参数:无
返回值:当前版本号,1Byte
4、
void USB30_ISO_Setendp(UINT8 num,FunctionalState Status );
当需要进行同步传输时,将某一个端点的配置成同步端点。
参数:
num:目标端点号
bit | Value |
---|---|
7 | 1 - direction IN,0 - direction OUT |
3:6 | reservd |
0:2 | endpoint number |
Status:ENABLE/DISABLE
返回值:无
5、
void USB30_ISO_Setdelay( UINT32 dly );
Set iosdelay.
参数:dly:配置值
返回值:无
6、
void USB30_ITP_Enable(FunctionalState Status);
Enable or disbale ITP interrupt.
参数:Status:ENABLE/DISABLE
返回值:无
7、
void USB30_OUT_Status(UINT8 endp,UINT8 *nump,UINT16 *len,UINT8 *status);
用于获取芯片完成一次OUT事务传输之后的传输状态。在EP?_OUT_Callback(void)
中被固定调用。
参数:
endp:端点号
nump:nump为USB3.0中最小概念,被SPEC直接定义,具体含义参考SPEC.对于CH569/565,这里可能会出现3、2、1、0,对应示例程序中的if和else if的条件,分别进行不同处理。
len:仅当参数nump为0时,该值有意义,表示BURST中最后一个包的长度,否则都应当是1024.
status:可以不用关心,有nump就够了
返回值:无
8、
void USB30_OUT_Set(UINT8 endp,UINT8 status,UINT8 nump);
配置芯片OUT事务应答状态。
参数:
endp:端点号
status:应答状态
value | status |
---|---|
0h | NRDY |
1h | ACK |
2h | STALL |
others | invalid |
nump:当前可以接收的USB包数量。对于CH569/565:BULK传输nump单次可配最大-4 ;ISO传输单次可配最大-16。
返回值:无
9、
void USB30_OUT_ClearIT(UINT8 endp);
清除OUT事务完成中断状态。在EP?_OUT_Callback(void)
中被固定调用一次,且配置的endp应当和?相同。如果需要在EP?_OUT_Callback(void)
配置下一次的OUT传输,那需要确保在USB30_OUT_Set(...)
之前调用此函数。
参数:endp:端点号
返回值:无
10、
UINT8 USB30_OUT_ITflag(UINT8 endp);
返回USBSS OUT事务传输完成中断状态,可能在不使用中断的,而用查询法写代码的时候可以用这个来替代自动进入EP?_OUT_Callback(void)
参数:endp:端点号
返回值:1-有中断、0-无中断
11、
void USB30_IN_Set(UINT8 endp,BOOL lpf,UINT8 status,UINT8 nump,UINT16 TxLen);
配置芯片IN事务应答状态。
参数:
endp:端点号
lpf:last pack flag/end of block,属于USB3.0中最小定义参数,被SPEC直接定义,具体描述参照标准SPCE。如不清楚实际意义,通常保持这个为有效是OK的
status:
value | status |
---|---|
0h | NRDY |
1h | ACK |
2h | STALL |
others | invalid |
nump:nump为USB3.0中最小概念,被SPEC直接定义,具体含义参考SPEC。当前准备好上传的包数量,对于CH569/565,仅在status配置成'ACK'时有实际意义,BULK传输时,这里通常值是1、2、3、4;ISO传输时,这里可以是1~16中的任意。
TxLen:如果是单包传输,代表当前发送包的长度;如果是BURST(即nump>1时),代表最后一包的长度。
12、
void USB30_IN_ClearIT(UINT8 endp);
清除IN事务完成中断状态。在EP?_IN_Callback(void)
中被固定调用一次,且配置的endp应当和?相同。如果需要在EP?_IN_Callback(void)
配置下一次的IN传输,那需要确保在USB30_IN_Set(...)
之前调用此函数。
参数:endp:端点号
13、
UINT8 USB30_IN_ITflag(UINT8 endp);
返回USBSS OUT事务传输完成中断状态,可能在不使用中断的,而用查询法写代码的时候可以用这个来替代自动进入EP?_IN_Callback(void)
参数:endp:端点号
返回值:1-有中断、0-无中断
14、
UINT8 USB30_IN_Nump(UINT8 endp);
用于获取芯片完成一次IN事务传输之后的传输状态。在EP?_IN_Callback(void)
中被固定调用。对于CH569/565,BULK传输,用于返回配置的本次BURST中剩余未发送的包数量,返回值可能是0、1、2、3,对于ISO传输,返回值可能是0~15 ,表示本次burst中已经发送的包数量。
15、
void USB30_Set_endp_seqnumber(UINT8 endp,PUINT8 seq);
配置某一端点的seq。在同步传输、或者在某些控制传输中可能需要使用。
参数:
endp
:目标端点号
bit | Value |
---|---|
7 | 1 - direction IN,0 - direction OUT |
3:6 | reservd |
0:2 | endpoint number |
seq
:序列号。序列号为USB3.0中最小概念,被SPEC直接定义,具体含义参考SPEC。对于一个通道,每完成一个包的传输,seq加1,seq从0增加到31后回到0。
16、
void USB30_Send_ERDY(UINT8 endp,UINT8 nump);
用于发送ERDY。ERDY包为USB3.0中最小概念,被SPEC直接定义,具体含义参考SPEC。由从机发送给主机,用于恢复处于“流控”状态的端点,使其能够继续传输。(流控为USB3.0中最小概念,被SPEC直接定义,具体含义参考SPEC。)
通常跟随在USB30_IN_Set
或USB30_OUT_Set
参数:
endp
:目标端点号
bit | Value |
---|---|
7 | 1 - direction IN,0 - direction OUT |
3:6 | reservd |
0:2 | endpoint number |
nump
:该数据通道后续可以接收或者发送的包数量。对于CH569/565,仅在BULK时可能需要调用,endp0该值最大为1,endp1~endp7最大为4。
返回值:无
17、
void USB30_Device_Setaddress( UINT32 address );
设置USB地址。
参数:address
:地址,主机通过控制传输下发配置的地址值。
返回值:无
18、
void USB30_IRQHandler();
USB3.0中断服务函数声明。查询法实现USB3.0功能,可以通过在主循环中不断调用该函数实现。
参数:无
返回值:无
19、
UINT16 USB30_StandardReq();
用于处理主机下发的setup请求,处理描述符的回传、USB地址的配置等等。
参数:无
返回值:长度值
值 | 含义 |
---|---|
0 | 接下去endp0发生方向为主机到从机的传输,有可能的是: 1、控制传输的数据阶段方向为OUT 2、控制传输的状态阶段 |
1~512 | 数据阶段IN的数据包长度 |
0xFFFF | 对该setup进行STALL的回复 |
20、
UINT16 USB30_NonStandardReq();
处理setup中的非标准请求,在USB30_StandardReq
被固定调用。这个函数可有可无吧~
参数:无
返回值:同USB30_StandardReq
21、
UINT16 EP0_IN_Callback();
端点0的IN事务完成中断回调函数,进入此函数,表示之前配置的IN事务传输完成。通常用于处理长度超过512字节的描述符的分包传输。