你好,我想将大量数据传送到USB。我正在使用USB_CDC示例项目,但使用此示例,吞吐量约为700 kbps。有没有办法加快USB CDC吞吐量?DMA有用吗?如果是,如何用USB_CDC初始化和使用DMA?
先感谢您。
嗨Techteh,
为了实现USB的最大可能性能,您应该使用1.0.14 SDK并执行以下更改:
1)在文件hw_usb.c中,在函数hw_usb_init()中更改如下:
REG_SET_FIELD(USB,USB_MAMSK_REG,USB_M_NAK,REG,1);
REG_SET_FIELD(USB,USB_MAMSK_REG,USB_M_FRAME,REG,1);
至:
REG_CLR_FIELD(USB,USB_MAMSK_REG,USB_M_NAK,REG);
reg_clr_field(USB,USB_MAMSK_REG,USB_M_FRAME,REG);
2)通过在custom_config_qspi.c中设置DMA宏:
#define dg_configusb_dma_support(1)
谢谢mt_dialog.
你好,感谢您的回复,我做了你所说的一切,但没有任何改变。吞吐量仍然是大约700 kbps。我的代码有什么问题(用于传输大量数据)。这里是:
usbd_cdc_write(hinst,transmit_buffer,2000,0);
谢谢。
如果您使用默认的CDC或者您做过任何修改,请澄清您吗?如果您使用的是默认的CDC,这仅适用于Loopback而不是性能,因为它是单一任务实现的,并且它仅使用一个任务来为两个USB接收和USB传输。如果要提高性能,强烈建议使用两个不同的USB接收任务和USB传输。
谢谢,PM_DIALOG.
你好,感谢您的回复,在您的帮助之前,我正在使用默认的CDC。现在我正在为这个问题使用两项任务,一个用于Rx和一个用于Tx,但仍然没有任何改变。我已附加了我修改过的USB_CDC.C文件。
minor-latin;mso-bidi-theme-font:minor-latin;background:white;mso-ansi-language: EN-US">你好Techteh.那
minor-latin;mso-bidi-theme-font:minor-latin;background:white;mso-ansi-language: EN-US">我正在检查你的代码,我会尽快通知你。
minor-latin;mso-bidi-theme-font:minor-latin;border:none windowtext 1.0pt; mso-border-alt:none windowtext 0cm;padding:0cm;background:white;mso-ansi-language: EN-US">谢谢,PM_DIALOG. mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font: minor-latin;background:white;mso-ansi-language:EN-US">
你好paramvir.in@gmail.com.那
由于数据传输的物理平均值是UART协议,因此不会更改吞吐量。因此,您可以使用CDC类实现的最大吞吐量为700kbps。双重任务实现是实现最大吞吐量的正确方法。
嗨Techteh,
为了实现USB的最大可能性能,您应该使用1.0.14 SDK并执行以下更改:
1)在文件hw_usb.c中,在函数hw_usb_init()中更改如下:
REG_SET_FIELD(USB,USB_MAMSK_REG,USB_M_NAK,REG,1);
REG_SET_FIELD(USB,USB_MAMSK_REG,USB_M_FRAME,REG,1);
至:
REG_CLR_FIELD(USB,USB_MAMSK_REG,USB_M_NAK,REG);
reg_clr_field(USB,USB_MAMSK_REG,USB_M_FRAME,REG);
2)通过在custom_config_qspi.c中设置DMA宏:
#define dg_configusb_dma_support(1)
谢谢mt_dialog.
你好,
感谢您的回复,
我做了你所说的一切,但没有任何改变。吞吐量仍然是大约700 kbps。
我的代码有什么问题(用于传输大量数据)。这里是:
usbd_cdc_write(hinst,transmit_buffer,2000,0);
谢谢。
嗨Techteh,
如果您使用默认的CDC或者您做过任何修改,请澄清您吗?如果您使用的是默认的CDC,这仅适用于Loopback而不是性能,因为它是单一任务实现的,并且它仅使用一个任务来为两个USB接收和USB传输。如果要提高性能,强烈建议使用两个不同的USB接收任务和USB传输。
谢谢,PM_DIALOG.
你好,
感谢您的回复,
在您的帮助之前,我正在使用默认的CDC。现在我正在为这个问题使用两项任务,一个用于Rx和一个用于Tx,但仍然没有任何改变。
我已附加了我修改过的USB_CDC.C文件。
谢谢。
minor-latin;mso-bidi-theme-font:minor-latin;background:white;mso-ansi-language:
EN-US">你好Techteh.那
minor-latin;mso-bidi-theme-font:minor-latin;background:white;mso-ansi-language:
EN-US">我正在检查你的代码,我会尽快通知你。
minor-latin;mso-bidi-theme-font:minor-latin;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm;background:white;mso-ansi-language:
EN-US">谢谢,PM_DIALOG. mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:
minor-latin;background:white;mso-ansi-language:EN-US">
你好paramvir.in@gmail.com.那
由于数据传输的物理平均值是UART协议,因此不会更改吞吐量。因此,您可以使用CDC类实现的最大吞吐量为700kbps。双重任务实现是实现最大吞吐量的正确方法。
谢谢,PM_DIALOG.