您好!
我将 DK-TM4C129X 板用作批量传输器件。 当我的 Windows 主机连接到 OTG USB 端口时、一切工作正常、但传输速率仅为800kb/s、我需要40Mb/s 我认为问题是 OTG 端口是 USB 1.1端口。 我知道该板具有 USB2.0 MAC。 如何使该板作为 USB 2.0器件连接到主机? 我必须进行哪些硬件和软件更改? 是否有其他支持 USB2.0器件的 TI 开发板?
谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我将 DK-TM4C129X 板用作批量传输器件。 当我的 Windows 主机连接到 OTG USB 端口时、一切工作正常、但传输速率仅为800kb/s、我需要40Mb/s 我认为问题是 OTG 端口是 USB 1.1端口。 我知道该板具有 USB2.0 MAC。 如何使该板作为 USB 2.0器件连接到主机? 我必须进行哪些硬件和软件更改? 是否有其他支持 USB2.0器件的 TI 开发板?
谢谢
Phil、您好、
该板未安装 USB 2.0 PHY、您需要通过 EPI ULPI 接口将一个 PHY 连接到该板。
我们没有销售的具有 USB 2.0功能的开发板、但我们有一个 TI 设计、其中包括已制作和测试的用于支持 USB 2.0的板的 BOM 和光绘文件。
此外、如果您决定尝试将 USB PHY 添加到 EPI ULPI 接口、还可以使用该软件。 这将向您显示所需的软件更改。
TI 参考设计链接为 :http://www.ti.com/tool/TIDM-TM4C129USBHS
您好、Ralph、
我正在使用示例项目 USB_DEV_BULK、并尝试添加代码以启用 USB 高速支持。
我签出了项目 TM4C129USBHS-1.0\TIDM_tm4c129cusbhs2ethernet、并将高速相关代码复制到 USB_dev_bulk.c 中的 main ()函数
我注意到 driver/pinout.c 文件包含一个函数 USBULPIPinoutSet(),因此我定义了 use_ULPI 以包含此函数。
在 main()中,我在 PinoutSet()之后添加了 USBULPIPinoutSet()。 我还 在设置 USBPLL 后添加了 USBDCDFeatureSet (0、USBLIB_FEATE_USBULPI、\ui32ULPI)。
SysCtlVCOGet (SYSCTL_XTAL_25MHz、\ui32PLLRate);
USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&ui32SysClock);
USBDCDFeatureSet (0、USBLIB_Feature_USBPLL、&ui32PLLRate);
ui32ULPI = USBLIB_FEATE_ULPI_HS; //设置用于高速的 ULPI 选项
USBDCDFeatureSet (0、USBLIB_Feature_USBULPI、&ui32ULPI); //这会导致 USBDBulkInit()锁定
但是、设置 USBLIB_FEATE_USBULPI 会导致函数 USBDBulkInit (0、&g_sBulkDevice)锁定。
我缺少什么? BTW、我尚未安装任何 USB2.0 PHY。 我正在从亚马逊订购 USB3300模块。
另一个问题是控制 GPIO 以复位和启用 PHY 模块。
我可以在 DK-TM4C129X 上使用哪个备用 GPIO? 我如何将它们作为输出。 我对这一点不太困惑。
在 TIDM_tm4c129cusbhs2ethernet.c 的 main()中,我看到它使用很少的 GPIO 来控制到 PHY 的复位。 但我看不到这些 IO 引脚引出到连接器。 我假设以下代码不能直接用于我的电路板。 再说一次、我可以使用哪个备用 IO?
bUSBBusMode = true;
GPIOPinWrite (GPIO_Porth_BASE、(GPIO_PIN_2 | GPIO_PIN_3)、GPIO_PIN_3);
//
//切换到 USBHS 并释放复位到 ULPI PHY
//
MAP_GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_7、0);
MAP_GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_5、0);
感谢你的所有帮助。
Phil
Phil、您好、
如果您没有连接 PHY、则无法启用 ULPI、如果没有 PHY、它将无法工作、因为它不会在其查找的位置看到任何数据。 您首先需要 PHY。
在我最初的帖子中、我说过将 PHY 连接到 EPI 接口、但我指的是 ULPI 接头。 您可以在左侧看到它们标记为 ULPI/LPC。
至于 GPIO、可以使用不用于 ULPI 或其他外设的任何备用 GPIO、有很多、没有需要遵循的具体建议、所以只需选择您认为不需要多路复用外设的选项即可。
我还想、对于 TI 设计、也将其整合在一起、使电路板能够同时执行 FS 和 HS、因此这由您决定这种功能的重要性。
拉尔夫
好的、当我获取 USB2.0 PHY 时、我将重试。
BTW、我在另一篇文章中看到、建议将 ui32PLLRate 设置为0。 哪种方式适用于高速?
//
//将 CPU 时钟和 PLL 频率告知 USB 库。 这是一个
// TM4C129器件的新要求。
//
SysCtlVCOGet (SYSCTL_XTAL_25MHz、\ui32PLLRate);
//ui32PLLRate = 0;//对于高速 PHY????
USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&ui32SysClock);
USBDCDFeatureSet (0、USBLIB_Feature_USBPLL、&ui32PLLRate);
7月4日、您会过得愉快。
谢谢
Phil
您好!
我有 Waveshare USB3300 PHY 模块、并通过3英寸跳线连接到 DK-TM4C129X 板。 我将 TI 参考项目 TIDM_tm4c129cusbhs2ethernet 中的 USB 高速相关代码添加到了 USB_dev_bulk.c 在 USB_DEV_BULK 项目属性中,我添加了预定义的 USE_ULPI,以便 可以调用 USBULPIPinoutSet()。
当我运行代码时、当 使用 USBLIB_FEATE_ULPI_HS 或 FS 调用 USBDCDFeatureSet (0、USBLIB_FEATURE_USBULPI、&ui32ULPI)时、它锁定在 USBDBulkInit()。 Windows 主机报告"USB 设备未识别"、设备管理器显示 未知 USB 设备(设备描述符请求失败)。
USB HS 的描述符在哪里? 我是否需要对其进行任何更改?
我已检查 USB3300模块上的时钟引脚。 它输出一个60MHz 时钟。 我将复位接地、因为 PHY 始终开启。
我比较了 Waveshare 和 TI 参考设计之间的 USB3300电路。 我看到 TI 设计上的 ID 上拉、Wavesare 连接到 USB 连接器。 我探测了 Waveshare USB3300模块上的 ID 引脚、它是高电平。 我认为 ID 引脚不是这里的问题。
我附加了项目 USB_DEV_BULT-HS 以及 USB3300模块和 TI USBHS 设计的原理图。 请查看我的代码以查看我遗漏的任何代码。
我是否有办法为您提供 Waveshare USB3300模块、以便您帮助使其正常工作?
TI 是否会使用 USB 2.0 PHY 制造另一个 DK 电路板?
请帮助。
谢谢
Phil
e2e.ti.com/.../USB3300_2D00_USB_2D00_HS_2D00_Board_2D00_Schematic.pdfe2e.ti.com/.../Schematic_5F00_tidrpl3.pdfe2e.ti.com/.../usb_5F00_dev_5F00_bulk_2D00_HS.zip
Phil、您好、
所有初始化看起来都正确、如果总线通信不正常、我相信您不会看到描述符故障。 看起来您使用的是与设计相同的描述符、因此也应该很好。
如果这不起作用、您将需要保留 USB 分析器、以便可以查看要调试的总线流量。 如果您可以发布日志、我可以在这方面提供帮助、我可以查看描述符的失败之处。
遗憾的是、接收硬件进行调试并不是我们为 E2E 支持所做的事情。
您好、Ralph、
我让 USB3300正常工作。 出于某种原因、USBPLL 必须设置为0。 有人知道原因吗?
ui32PLLRate = 0; 对于高速 PHY、//必须设置为0
USBDCDFeatureSet (0、USBLIB_Feature_CPUCLK、&ui32SysClock);
USBDCDFeatureSet (0、USBLIB_Feature_USBPLL、&ui32PLLRate);
现在、Windows 将 DK 的 ULPI 视为高速 USB 器件。 但是、我只能获得7.8Mb/s 的传输速率。 在我使用 Cypress FX3的另一个项目上、我可以获得高达46.5MB/s 的传输速率
我已经将 bulk_buffer_size 设置为2048或4096、并注释掉了所有数据处理和图形代码。 此 ULPI 端口上的传输速率仍然仅为7.8Mb/s
要提高批量传输速率、必须采取哪些措施?
请帮助。
谢谢
Phil
Phil、您好、
我不知道昨天我的答复发生了什么,但似乎没有解决,对此感到抱歉。 虽然我的建议不会有所帮助、因为我认为它可能与接线相关。 不幸的是、我的终端上没有任何 HS 硬件。
话虽如此、我将不得不研究为什么 HS 需要这么做...
在传输速度方面、您需要使用 USB DMA 来提高吞吐量。 这是我在待办事项列表中要汇总的一个示例、但尚未准备好。 不过、我可能会找到一些代码提示供您尝试、让我看看我明天可以看到哪些内容。 我认为您可以尝试和执行的另一项操作是也启用双缓冲。
您是否还验证了数据传输速率是否为每数据包512字节?
此外、在查看模块的详细信息时、我注意到它甚至不是10美元... 那么、有一个正在向我发送。 不确定发货时间有多长、但当它到达时、如果您没有取得任何突破、我也可以尝试在我的末尾进行调试。
您好、Ralph、
很高兴听到你的声音。 虽然 DK 电路板现在可以在高速模式下连接到主机、但我确实一直关注传输速率。 是的、它传输512字节的数据包。 除了 USBPLL 需要设置为0、我使用的跳线太长、无法连接 USB3300。 我构建了两个版本、一个具有原型板、另一个具有1"跳线。 原型板和1英寸跳线工作正常。 (请参阅图片)
还附加了用于 USB 传输的图片。 第一个512字节数据包从11.433.492秒开始、大约需要8.667 μ s 才能完成(60MHz)。 但是、开始传输接下来的512个字节大约需要64 μ s。 因此、有效传输速率为512/64usec = 8 Mb/s
请告诉我如何使用双缓冲和 USB DMA 将传输速率提高到40Mb/s
谢谢
Phil
Phil、您好、
EP0由 USB 库设置并根据 usblib 传输数据、这就是您在示例中看不到代码的原因。
诸如 USBDCDSendDataEP0和 USBDCDRequestDataEP0之类的 API 用于控制 EP0、但我从未尝试过在应用层中使用它们。 它们应与 usbdhid.c 内的 HandleEP0DataReceived 和 HandleEP0DataSent 处理程序配合使用 这可能会帮助您找到合适的 EP0数据包路径?
顺便说一下、您需要多长时间才能收到 Waveshare EVM?
您好、Ralph、
我从亚马逊订购了三个 USB3300、花费了3到4天时间。 发货标签显示它是由 Contactempo Views Inc、172 Trade St.发运的 Lexington KY 40511
关于 EP0通信、我在接收消息之前跟踪了代码、发现 usbdbulk.c 没有为 EP0执行任何处理程序。 我需要的是在我的应用程序中接收来自主机的供应商请求。 在 usbdbstub.c - tCustomHandlers g_sBulkHandlers 结构中、我添加了一个条目 HandleRequest 来捕获来自 EP0的非标准请求。 不管用。 在此 HandleRequest 例程中、我通过请求类型进行区分、并将 wValue 保存到全局变量中。 在应用中。 主循环只是查找 wValue 的变化。 很确定有更好的方法。 TI 参考文献并未为应用程序提供通过 EP0进行通信的简单方法、这让我感到非常惊讶。
希望您很快就能获得 USB3300模块。 我阅读了该文档并看到了一些与 USB DMA 相关的函数、只是不确定如何设置它们。
谢谢
Phil
您好、Phil、
好奇您是否已 将 EP1批量传输数据包大小从64字节修改为256或512? 此外、如果没有错误、可能 需要修改 USB 1.1 EP0描述符 (参数)以指示 USB2.0 握手。 不确定示例代码是否具有以下配置、尽管它可能会有所帮助。
/*将 EP_0/1 (RAM)输入/输出起始地址、0,64,576字节配置到 FIFO 中 *必须在8字节边界上 EP_0为控制端口数据保留前16个字节。 * //MAP_USBFIFOConfigSet (USB0_BASE、USB_EP_0、0、USB_FIFO_SZ_64、USB_EP_DEV_OUT); MAP_USBFIFOConfigSet (USB0_BASE、USB_EP_1、64、USB_FIFO_SZ_512、USB_EP_DEV_OUT); //USB_EP_HOST_OUT MAP_USBFIFOConfigSet (USB0_BASE、USB_EP_1、576、USB_FIFO_SZ_512、USB_EP_DEV_IN); //USB_EP_HOST_IN //在端点 DMA 通道模式1中配置,通常用于传输 *跨多个数据包,并且数据包之间不需要中断。 *在端点 DMA 通道模式0中配置、通常用于传输 *不跨越多个数据包或每个数据包需要 INT 时。 * MAP_USBEndpointDMAConfigSet (USB0_BASE、USB_EP_1、 USB_EP_DEV_IN | USB_EP_DMA_MODE_0 | USB_EP_AUTO_SET | USB_EP_AUTO_REQUEST); /*为输出端点1配置 DMA 通道模式1 */ MAP_USBEndpointDMAConfigSet (USB0_BASE、USB_EP_1、 USB_EP_DEV_OUT | USB_EP_DMA_MODE_0 | USB_EP_AUTO_CLEAR);//USB_EP_AUTO_Request (EPN 主机) /*将 USB0输入/输出端点1配置为16-1023字节的数据包大小。 * USB_EP_2、USB_EP_3、USB_EP_4、USB_EP_5、USB_EP_6、USB_EP_7 * MAP_USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、 (USB_EP_MODE_BULK_|USB_EP_AUTO_SET|USB_EP_AUTO_CLEAR);/USB_EP_AUTO_Request (EPN 主机)
拉尔夫
我没有修改 USB 库中的512个数据包大小。 我认为、当我们设置 USBLIB_FEATE_USBULPI = USBLIB_FEATE_ULPI_HS 时、所有这些都由库处理
ui32ULPI = USBLIB_FEATE_ULPI_HS;//USB-HS、为高速设置 ULPI 选项
USBDCDFeatureSet (0、USBLIB_Feature_USBULPI、&ui32ULPI);
我的 Linux 控制台和 USB 分析器都指出、DK 电路板的 ULPI 端口以高速方式连接、数据包大小为512字节。
在 usblib\dev\usbbbbbbbulk.c 的第1181行中、它检查 USBLIB_Feature_USBULPI == USBLIB_Feature_ULPI_HS、并使用高速描述符 g_pbulkConfigtorsHS。
关于您所附的代码、样本代码中没有一个、我对添加它们以提高批量传输速度的内容和位置感到困惑。 目前、我的 DK 的 ULPI 端口的最高批量传输速率约为7.5Mb/s
您是否已收到 USB3300板? 请帮助我设置 DMA 和 FIFO、以实现大约40Mb/s 的更高传输速率
再次感谢。
Phil
[引用 user="Phil Chu"]关于您所附的代码,[/引用]
请注意、不是 Ralph 附加了此代码。 在设置 ULPI 模式和 调用 USBDBulkInit()之后、您可以将其添加到(USB_dev.bulk.c)中。 似乎认为 USB2.0 EP1-7可以支持1024个数据包大小、请务必进行检查。 Microsoft 批量 客户端也可以 通过 lmusbdll.lib 支持1024字节数据包。
[引用 USER="Ralph Jacobi"]关于 USB EP0,规范是高速 EP0设置为 64字节[/引用]
右键同意 TI 编码的 MS 驱动程序会忽略为 EP0设置的较大数据包大小。 但是、我指的是 EP1-7、其中发生批量或其他数据包传输 可能允许中断传输、 根据 USB2.0 知识库链接、数据包大小为1024字节。 还有 其他地方 提供 了有关最大数据包大小的通用信息、 挖掘 Web 链接似乎将 USB1.1和 USB2.0混合在一起、 文本无法 明确哪一个。
Ralph/BP101、
附加的是我的 USB_DEV_BULK_HS 项目。 我的目标是以最快的速度(40Mb/s)将较大的文件(例如78KB 至10MB)从主机传输到器件的存储器。 在我的当前代码中、我向器件发送一个图像(采用 C 二进制的 PNM)文件、并将数据显示到 LCD、仅用于演示目的。 到目前为止、传输速率约为7.5MB/s
我曾尝试过 BP101中的代码和 TivaWare外设驱动程序库用户指南 中的 DMA 设置代码,32.4.5节-使用集成 USB DMA 控制器-接收多个数据包。 但我没有看到任何数据被传输到用户数组。 传输速率仍然相同。 我还尝试了不同的 USB 缓冲器大小。 我将大小设置为78000、以便它适合我的图像数据。 我跳过了所有数据处理代码。
我正在使用 Cypress FX3 Streamer Windows 应用程序来检查传输速率、因为我没有其他任何东西。 我将供应商和产品 ID 修改为 Cypress FX3、以便 Streamer 应用程序可以识别器件。
我还使用了 LeCroy Mecury USB 分析仪来测量传输速率。 从512字节数据包到数据包花费了70 us。 即7.3Mb/s
提前感谢您的所有帮助。
Phil
e2e.ti.com/.../usb_5F00_dev_5F00_bulk_2D00_HS_5F00_TI_5F00_20190730.zip
拉尔夫
请注意、我将 USB3300的复位线路连接到 DK 电路板 PG1。 我以 PNM C 数组格式附加了 SPRAY 和 SpaceX 的映像二进制文件。 如果您设置 bulk_buffer_size = 81920、并将绘图线更改为 GrImageDraw (&g_sContext、g_pui8USBRxBuffer、0、0)、则当您将文件发送到电路板时、您将看到图像以彩色显示在 LCD 上。 您可能需要取消注释行 USBBufferInit(&G_sRxBuffer),以便再次发送映像。 如果您想尝试 Cypress FX3 Streamer 工具来设定传输速率的基准、请告诉我。
我一直尝试不同的 DMA 设置、但我无法获取 DMA 来将数据传输到存储器。
Phil、您好、
是的,我看到了 PG1调整,我同意方便的引脚选择:)
不幸的是、我在最后遇到了一个小问题、因为我设法使我的 DK 板崩溃、并且仍在尝试恢复它。 我仍在为如何实现这一目的而努力、但无论如何、需要备份并运行以进一步测试...
我已经更详细地研究了 USB DMA 主题、并找到了有关 DMA 配置的以下说明:
// // // uDMA 控制器使用的控制表。 此表必须与 1024字节边界对齐//。 在此应用中、UDMA 仅用于 USB、 //因此只需要前6个通道。 //// ***************** #if defined (__ICCARM__) #pragma DATA_ALIGINS=1024 tDMAControlTable g_sDMAControlTable[6]; #Elif defined (__TI_ARM__) #pragma DATA_ALIGN (g_sDMAControlTable,1024) tDMAControlTable g_sDMAControlTable[6];#DMACONTROLEST_CONTROL1 (#DMACONTROL1 (#DMACONTROL1 (6_ )(#DMACONTROL1 (#DMACONTROL1
这是唯一使用的其他代码、基于此代码:
// //启用 uDMA 控制器并设置控制表基址。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UDMA); ROM_uDMAEnable(); ROM_uDMAControlBaseSet (g_sDMAControlTable);
不过、我需要在我的末尾测试这是否足以支持高速。
我在考虑您的应用时考虑的另一件事是、我想知道图形部分是否增加了某种瓶颈。 最后、我打算使用简单的数据回送测试来测试速度、该测试旨在强调器件的传输能力。
此外、在下一个 TivaWare 更新中、USB 库还针对高速 DMA 进行了一些修复、可能值得您添加、尤其是因为我将使用中的修复进行测试。
我建议尝试添加这些修复程序(这要求您重新编译 usblib 以便正确编译它们)、并将 DMA 代码恢复到上面发布的基本设置、然后查看性能方面的变化。 修复方法包括在 UsbLib 中将最大数据包大小而不是64字节用作 DMA 传输的一部分、因此可以显著提高吞吐量。
文件附于此处:
usblib/usbdma.c
usblib/host/hostenum.c
[引用 USER="Phil Chu"]根据文档、TM4C129支持集成 USB DMA[/引用]
µDMA 远程 μ DMA 外设与 集成到 USB 控制器外设中的 DMA 相距遥远、 Tivaware 文本使我们相信本地 DMA。 回想一下 、USB 库中正在配置 USB0 DMA 控制 器的 BulkDevice 初始化内部调用、位于其中的某个位置。
一些被认为 是 BulkDevice 传输的东西可能无法 以每秒40MB 的速度进行传输、这可能与 中断或等时 EP 模式一样。 似乎还记得 、批量传输速度有一个限制。 注意 HS 模式 建议为480Mbits/Sec、可处理 60MegaBytes/秒。 因此 、EP 配置必须针对 连接两端的端点进行正确配置、而不仅仅是控制 EP0。 "设备"一词似乎不会推断批量传输类型。
// // //以下是可作为 ui32Flags 参数传递给 USBHostEndpointConfig()和// USBDevEndpointConfigSet()的值。 //// ***************** #define USB_EP_AUTO_SET 0x00000001 //自动设置功能已启用 #define USB_EP_AUTO_REQUEST 0x00000002 //自动请求功能已启用 #define USB_EP_AUTO_CLEAR 0x00000004 //启用自动清除功能 #define USB_EP_DMA_MODE_0 0x00000008 //使用模式0 #define USB_EP_DMA_MODE_1启用 DMA 访问 0x00000010 //使用模式1 #define USB_EP_DIS_Nyet 启用 DMA 访问 0x00000020 //禁用的 Nyet 响应 //高速批量和中断 设备模式下的//端点。 #define USB_EP_MODE_ISOC 0x00000000 //等时端点 #define USB_EP_MODE_BULK 0x00000100 //批量端点 #define USB_EP_MODE_INT 0x00000200 //中断端点 #define USB_EP_MODE_CTRL 0x00000300 //控制端点 #define USB_EP_MODE_MASK 0x00000300 //模式掩码 #define USB_EP_SPEED_LOW 0x00000000 //低速(1.5兆位/秒) #define USB_EP_SPEED_FULL 0x00001000 //全速(12兆位/秒) #define USB_EP_SPEED_HIGH 0x00004000 //高速(480兆位/秒) #define USB_EP_HOST_IN 0x00000000 //主机输入端点 #define USB_EP_HOST_OUT 0x00002000 //主机输出端点 #define USB_EP_DEV_IN 0x00002000 //端点中的器件 #define USB_EP_DEV_OUT 0x00000000 //设备输出端点
BP101、
我还看到了 USB 初始化期间调用的 USBLibDMAInit()函数。 仍然无法获取 DMA 以将数据从 USB 端点1传输到存储器。
非常确定批量传输支持60Mb/s、因为我的 Cypress FX3可以在批量传输模式下以45Mb/s 的速率向 Windows 主机发送和接收数据。
Ralph、您的 DK 电路板是否已启动并运行、以便进行基本批量传输? 我被困在这里。
谢谢
Phil
[报价用户="Phil Chu"]仍然无法获取 DMA 以将数据从 USB 端点1传输到内存
EP1有两个流-您通过 DMA 将 DEV_IN 从目标传输到存储器、然后传输到主机? 相信 DEV_IN/OUT 是从控制端点的角度得出的。
据说 DCD 缓冲区 通过 构建的一部分(USB_bulk_structs.c)在 EPN FIFO 和复合器件驱动程序之间进行楔形。
[报价用户="Phil Chu"] Cypress FX3可以在批量传输模式下以45MB/s 向 Windows 主机发送和接收数据[/报价]
如何确认 DMA 传输未发生、 您 自己从未确认过 DMA 传输。 也许 USB0外设 EPN DMA 状态下的 CCS 调试(持续刷新)子列表?
BP101、
是的、这有点令人困惑。 我将 USB_EP_HOST_IN (=0)用于这些 DMA 设置。 我认为这是从主机 EP1和 DMA 向外接收数据到目标存储器的正确方法。
连接的是我的 USB_dev_bulk.c 我添加了您之前建议的代码以及 TivaWare外设驱动程序库用户指南第32.4.5节中的 DMA 设置代码
要验证 DMA 是否正常工作、我在 CCS 中进行调试、查看存储器地址0x20000000、数据从未改变。 以某种方式、集成的 USB DMA 从未被触发。
尽管我设置并启用了集成的 DMA,但 Rxhander()始终被调用。 我希望 DMA 正常工作时、不需要处理数据接收事件。 您是否知道接收处理程序为何在 DMA 操作下仍处于活动状态?
谢谢
Phile2e.ti.com/.../usb_5F00_dev_5F00_bulk.c
Phil
[引用 user="Phil Chu"]您是否知道接收处理程序为何在 DMA 操作下仍处于活动状态?
否、但我昨天发现 、TX/RX (EPN) DMA 模式需要最后一个配置。 您的代码中是否包含这些 DMA 指令?
[引用 user="Phil Chu"]关于集成 USB DMA 从未被触发的具体情况
USB0寄存器 DMA FIFO 应 指示 CCS 调试中的某种操作。 中断 文本 信息包已满结束(模式0)会触发 DMA 中断。 也许可以使用 EP1尝试模式1、看看 在这两种模式下、更改是否会在 USB0外设寄存器下产生任何 DMA 活动。
/*将 DMA 通道0分配给 DMA 模式0中的端点1、4字突发、 *启用中断并立即启用传输。 *! 使用以下任一项设置传输方向: *! -\b USB_DMA_CFG_DIR_RX 选择一个从端点到存储器位置的 DMA 传输。 *! -\b USB_DMA_CFG_DIR_TX 从存储器位置选择一个到端点的 DMA 传输。 *! 以下两个可选设置允许应用程序立即执行 *! 配置 DMA 通道时、启用 DMA 传输和/或 DMA 中断: *! -\b USB_DMA_CFG_INT_EN 会立即为此通道启用中断 *! 无需添加对 USBDMAChannelIntEnable()的调用。 *! -\b USB_DMA_CFG_EN 立即启用 DMA 通道、以便添加 *! 无需调用 USBDMAChannelEnable()。*/ MAP_USBDMAChannelConfigSet (USB0_BASE、0、USB_EP_1、 (USB_DMA_CFG_BURST_4 | USB_DMA_CFG_MODE_0 | USB_DMA_CFG_DIR_TX | USB_DMA_CFG_INT_EN | USB_DMA_CFG_EN);
尊敬的 Ralph 和 BP101:
感谢您的更新和信息。 我取得了一些进展。 我使用 CSS 检查所有与 DMA 相关的寄存器。 这些 DMA 函数对寄存器的实际作用并不令人困惑。 我已验证在 main()中的初始化例程之后寄存器 USBDMACTLn 和 USBRXCSRHn 是否正确设置。 我注意到、一旦 DK 电路板连接到主机、寄存器 USBDMACTLn 和 USBRXCSRHn 就会改变、并且 DMA 会被禁用。 我使用 HWREGB()进行硬编码,以将它们设置回正确的值,从而在连接事件处理程序中启用 DMA。 然后、我看到 USB 数据实际上被移动到我设置的存储器中。
双缓冲寄存器 USBRXFIFOSZ 也存在同样的问题。 我也对这个进行了硬编码。
在所有这些时间、当器件连接到主机时、我的设置代码基本上会被否定。
问题是、当器件连接到主机时、为什么 USB 库低级函数会复位双缓冲和 DMA 使能位。
谢谢
Phil
拉尔夫
希望您能有更多的时间来研究文献目录问题。
为了使双缓冲有效、我必须向寄存器 RXFIFOSZ 写入0x16。 USBLib 函数仅将其设置为0x06。 位4需要为1。 没有用于设置该位的独立函数。
HWREGB (USB0_BASE + USB_O_RXFIFOSZ)= 0x16; //接收 FIFO 大小、双数据包缓冲、数据包大小512 USB_RXFIFOSZ
此外、将寄存器 RXDPKTBUFDIS (偏移量0x340)设置为0或0xFE 对双缓冲没有影响。 为什么?
要加快数据传输速度、需要禁用 Nyet。 我跟踪了 usblib 代码、发现我还必须在 USBDevEndpointConfigSet()中包含标志 USB_EP_MODE_BULK。
USBDevEndpointConfigSet (USB0_BASE、USB_EP_1、512、USB_EP_DEV_OUT | USB_EP_AUTO_CLEAR | USB_EP_DIS_Nyet | USB_EP_DMA_MODE_1 | USB_EP_MODE_BULK);
//这将 USBRXCSRH1设置为0xB8、 必须包含 USB_EP_MODE_BULK 才能禁用 ISO 传输
或 HWREGB (USB0_BASE + EP_OFFSET (USB_EP_1)+ USB_O_RXCSRH1)= 0xB8;
谢谢
朱菲尔
Phil、您好、
我再也不能确定何时会这样做。 虽然我想在 TI 设计之外提高我们支持 USB HS 的能力、并澄清 USB DMA 功能、但坦率地说、USB DMA 非常复杂、几个小时内我无法再构建一个工作示例。 从我第一次提到这个例子以来、我一直在讨论这个例子、但由于实现这个例子并不简单、现在由于优先级更高的问题、这个例子一直在不断下滑。 我不知道何时可以承诺在此时完成这项工作。
此外、我可以说、USB3300的 USB HS 启动将至少在11月才会启动、现在根本没有用于该级别调查的带宽。
长期而言、我想让它启动并运行、并使用它提供一些吞吐量分析、因为这不是通过 USB HS TI 设计实现的。 然而,我们正处于一些非常关键的项目之中,调查不能优先于我的其他任务。
我知道这条线程长度后、这是一个糟糕的答案、但我现在非常简单、现在很明显、我无法在合理的时间内将这个问题深入到我的日程中。
Phil、您好、
挑战在于 USB 库的开发人员不再可用。 我是实际处理维护和任何错误修复的人。 但是、由于我没有编写、因此很难评估修复错误的正确方法、而这种方法不会带来更多的风险。 有些非常简单、但另一些则需要付出大量努力并进行测试。 跟踪不明确的根本原因(如此处所示)也会增加另一层复杂性。 从任何方面来说、这并不理想、但尽管如此、随着时间的推移、已经取得了一些改进(一些待发布的待发布文件、尽管与此无关)。
[引用用户="Phil Chu"]想知道其他人是否在高速、DMA 和双缓冲模式下使用 TM4C129's USB。
我的小公司感受到(两者)海报和供应商代理的痛苦。 然而、我们从未使用过(任何)'129器件。 (该细节超出了此主题)
(可能)有用的是检查、"如果"和"如何"-其他/类似的 ARM Cortex M4供应商-参与了这一(或近)要求。 虽然各个供应商的实施可能会有所不同-因为源'IP'是 ARM -这种'多供应商调查'在我公司的成功中取得了成功、但"排除"(否则)通常是无法发现的 MCU 行为和机制! (和-不止一次!)
这通常不是:"轻松、快速或轻松"。 然而-作为一个水手-当在海上裂开并上水时-即使是最好的杯子也会变成"帆船代理"。
还请注意、自从该供应商推出(现在-自豪地被称为"其他") MCU 以来、(很多)时间已经过去了-这"增加了可能性"、即(可能)-在新领域(对于更新的-"甚至命名"器件)进行搜索-可能会产生重要的见解...
当天空变黑时,所有的水手都“保释”——风帆——“看不到任何土地”。 接近"危险"的情况(可能)要求做出独特的、甚至是间接的或不寻常的(对某些人)努力。 当然(有些)有重点的活动会被动地压倒一切、"等待自己的船只上足够的海、然后再算海量!"