lvben5d 发表于 2022-7-25 13:20

AT32F425 USBD自定义升级包长度为1030字节。

本帖最后由 lvben5d 于 2022-7-25 14:20 编辑

通过USB上位机解析HEX文件,按照一页page为1024字节容量的MCU,我上位机设计下发数据包为1030字节(1024+6个字节的包头 尾序列号等),之前在GD32E103 (usb sram有1.25KB 字节可以设置1030 RX FIFO 以及EPO EP1 TX FIFO长度)我上位机是直接塞入 USB   1030字节, 我GD32E103 RXFIFO是 128*4512字节,但是中断响应快,估计是从RX FIFO取走了一些字节处理(此时上位机还是在自动拆包分发),所以组包后,收到每一次完整包字节数是1030没错。

tanleitanlei 发表于 2022-7-25 13:58

本帖最后由 tanleitanlei 于 2022-7-25 14:11 编辑

首先对于这句话“按照CM4内核这种 一页为1024字节的特性”不能理解你所要表达的意思,暂且猜测你想表达的是片上flash,片上flash的页大小和CM4内核无关,此参数可查阅RM。
其次对于425 USB专用RAM空间为1280字节是否够用的问题,答案是够用。USB协议对于不同的传输类型(interrupt、bulk、iso、ctrl)来讲单包的数据量是不同的,上位机在发送时会根据协议的不同进行分包下发,对于MCU端 USB每收到一包数据就要进行处理(数据接收是USB硬件,但数据处理是软件行为)。
对于你的问题,上位机每次塞入1030字节数据,会被拆分成多包数据下发,这一点你可以抓包看到,MCU端应将这些数据保存下来进行处理,这是软件控制。另外,是在什么地方看到425 USB只有1080字节RAM的呢?425也是1280字节RAM。

tanleitanlei 发表于 2022-7-25 14:10

另外是在什么地方看到425 OTG只有1080Kbyte RAM的呢??425也是1280Kbyte RAM。

lvben5d 发表于 2022-7-25 14:31

实际使用中,我感觉只要USB dev接收处理及时,这个RX FIFO可以设置少一点,反而个别应用 当用户上传数据包一次可能超过64字节,这个时候用户的TX fifo最好长度就设置成最大包长,否则自己还得拆包 塞入tx fifo吧?这样反而麻烦。 比如我之前做一款USB转TLL,用户发给我TTL RX的包 可能是大于64字节~512字节之间的,我这个完整包,如果通过usb发给 host ,最好一次丢给usb tx fifo 由内部机制来处理拆包上发。 最后只要等发送完毕,发送资源释放(可以发新包就可以了吧)

tanleitanlei 发表于 2022-7-25 15:38

lvben5d 发表于 2022-7-25 14:31
实际使用中,我感觉只要USB dev接收处理及时,这个RX FIFO可以设置少一点,反而个别应用 当用户上传数据包 ...

使用 usb库调用发送数据API接口,不用关注数据包大小,大于一包数据内部会自动处理。

lvben5d 发表于 2022-7-25 16:41

本帖最后由 lvben5d 于 2022-7-27 07:22 编辑

tanleitanlei 发表于 2022-7-25 15:38
使用 usb库调用发送数据API接口,不用关注数据包大小,大于一包数据内部会自动处理。 ...
帅哥说的是上位机那边吗?上位机那边下发   注意下位机 USB dev 这边叠包处理就好,我想跟你请教mcu这边 tx fifo设计尺寸大小。是不是如我所想这样配置。{:handshake:}   rx fifo 只要处理快速 2个64字节就够吧!tx fifo 有的客户 大于64字节上传,就设计大一点。之前一直理解错误? 无论是GD32E 还是AT32F示例里 FIFO的尺寸安排默认都是2字节的吧(因为我看到void usb_set_rx_fifo(otg_global_type *usbx, uint16_t size)
{
usbx->grxfsiz = size;
})
我以前理解是4字节。
/* otg1 device fifo */
#define USBD_RX_SIZE                      64
#define USBD_EP0_TX_SIZE               24
#define USBD_EP1_TX_SIZE               512//1024字节

页: [1]
查看完整版本: AT32F425 USBD自定义升级包长度为1030字节。