关于CH55x系列USB的DMA配置问题

1、对于单发送或者接收的端点,端点数据长度为32字节,是否可配置DMA缓存长度为32字节;

2、手册上有这样一句话:

image.png


“注:接收数据的缓冲区的长度 >= min(可能接收到的最大数据包长度 + 2 字节,64 字节)”

这个“2字节”是个什么意思?

1、需要指定端点描述符大小为32+2字节。

2、在USB数据包中的有效数据后会有2字节的CRC。当DATA包的数据段不满64字节时,2字节的CRC也会被DMA搬运至RAM中,需要在定义缓冲区的时候进行占位。



就是说多出来的2字节在分配dma空间时还是必须分配,但是软件的其他地方是否可以使用这2字节的空间呢?还是让他空着不管?


你好,顺便再问个问题,请问ch55x系列单片机中所有的中断优先级可不可以设置成同级别的,也就说让某几个中断不嵌套。我看了下手册感觉中断默认都是嵌套的。谢谢!


如果是传输长度不满64字节,缓冲区需要2字节占位的情况下,这两个字节随时可能被USB外设修改(当发生了USB传输的时候)。

如果不想产生嵌套,IP寄存器全部设为0即可。


注:接收数据的缓冲区的长度 >= min(可能接收到的最大数据包长度 + 2字节,64字节) 

还是这个问题,如果设备描述符的端点0最大包设置为64字节=0x40,最大可能收到的数据包为64字节,

这里min(64+2,64)=64,缓冲区长度要设置为64?可能多出来的两个字节CRC放哪里呢?

看了很多Demo,端点0最大包都设置为8字节,是否可以设置为64字节呢?

或者是否可以这样理解:最大缓冲区长度可以设置64字节,可接收的最大数据包长度为64-2=62字节?



1、USB传输较长包时,有效数据加上2字节CRC超过64字节长度的,超出64的部分不会被DMA搬运到RAM中。

所以缓冲区长度定义成64,就可以保证任意长度的数据传输可靠。

当USB传输全部是短包的时候,从节约ram使用的角度考虑,可以准确的定义缓冲区长度为 最大包长度+2。

image.png

举例:当设计端点0的最大长度为8字节(端点0能力是64字节,根据需要可以改)的时候,缓冲区长度需要配置成8+2=10字节

        端点1根据通讯双方约定的最大包长度是32字节的时候,长度32+2=34字节

        端点1根据通讯双方约定的最大包长度是63字节的时候,63+2=65,65大于最大长度64,长度写成64字节

        端点1根据通讯双方约定的最大包长度是64字节的时候,长度直接等于64字节

2、端点长度问题

image.png

端点0可以配置成64字节的长度,缓冲区定义长度问题同其余端点一致


感谢解释,这下就非常清楚了。

一句话总结就是:USB的DMA在搬运数据时,会多搬运2个字节的CRC,但是搬运总数据最大不超过64字节。

ps.

两个字节的CRC对用户来说是没有用的,感觉这个像是USB IP的的一个known issue.


只有登录才能回复,可以选择微信账号登录