器件型号: AM6421
您好:
我看到 Linux SDK 中已解决勘误表 i2409。 在我们的应用中、我们从 R5 内核和 FreeRTOS 运行 USB。 我在最新的 MCU Plus SDK 12.0 中搜索、没有发现类似的 i2409 修复已经实现。 如果是这种情况、请说明如何做到这一点、因为 MCU Plus SDK 中不存在类似的文件 (drd.h、drd.c、core.h、cdns3-ti.c)。
谢谢您、
Joe
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.
器件型号: AM6421
您好:
我看到 Linux SDK 中已解决勘误表 i2409。 在我们的应用中、我们从 R5 内核和 FreeRTOS 运行 USB。 我在最新的 MCU Plus SDK 12.0 中搜索、没有发现类似的 i2409 修复已经实现。 如果是这种情况、请说明如何做到这一点、因为 MCU Plus SDK 中不存在类似的文件 (drd.h、drd.c、core.h、cdns3-ti.c)。
谢谢您、
Joe
您好 Joe、
是的、您回答正确。 权变措施序列未在当前 SDK 中实现。
在正常操作(复位后)期间、可以随时访问暂停驻留寄存器。 因此、需要小心访问它、以免影响控制器的正确运行。
在由 SW 启用控制器以供操作之前、需要确保访问配置寄存器。 请 查找以下操作序列。
1.接通电源
2.控制器重置 inputs.de-asserted
3、写暂停居住登记
4.启用控制器以在器件模式下使用 DEVEN 位运行。
我提供以下代码、用于 在 () 函数内 USB 复位释放后设置 SUSP_CTRL 寄存器的 SUSPEND_REATION_ENABLE 位、该函数在 ${MCU+SDK}/source/usb/cdn /usm/am64x_am243x/usb_wrapper.c 处找到 soc需要先设置该位、然后才会如上述序列中所述启用控制器以供 SW 操作。 (即在启用控制器以将 DEVEN 位用于器件模式运行之前)
请找到以下代码以实施已发布勘误表的权变措施。
static int32_t usbConfig(usb_init_param_t *usbInitParamsPtr)
{
uint32_t usbBaseRegs = 0;
uint32_t usbCmnRegs = 0;
uint32_t modeStrap = 0;
usbBaseRegs = CSL_USB0_VBP2APB_WRAP_CONTROLLER_VBP_CORE_ADDR_MAP_BASE;
usbCmnRegs = CSL_USB0_MMR_MMRVBP_USBSS_CMN_BASE;
/* assert reset to the USB controller */
usbss_reset_assert(&usb_handle);
/* set the USB controller to host or device mode */
if(usbInitParamsPtr->isHostMode == 1)
{
modeStrap = MODESTRAP_SEL_HOST_MODE;
}
else
{
modeStrap = MODESTRAP_SEL_DEVICE_MODE;
}
HW_WR_FIELD32(usbCmnRegs + CSL_USB3P0SS_CMN_USB3P0SS_W1,
CSL_USB3P0SS_CMN_USB3P0SS_W1_MODESTRAP, modeStrap);
HW_WR_FIELD32(usbCmnRegs + CSL_USB3P0SS_CMN_USB3P0SS_W1,
CSL_USB3P0SS_CMN_USB3P0SS_W1_MODESTRAP_SEL,
MODESTRAP_USES_MODE_S_SEL);
/* set to USB2.0 only if USB3.0 is not enabled. i.e SERDES is not used */
HW_WR_FIELD32(usbCmnRegs + CSL_USB3P0SS_CMN_USB3P0SS_W1,
CSL_USB3P0SS_CMN_USB3P0SS_W1_USB2_ONLY_MODE, usbInitParamsPtr->usb2Enable);
/* release reset */
usbss_reset_release(&usb_handle);
/* wait for Controller Not Ready to go 0 */
while(HW_RD_FIELD32(usbBaseRegs + CSL_USB3P0SS_CTRL_DRD_OTGSTS,
CSL_USB3P0SS_CTRL_DRD_OTGSTS_OTG_NRDY));
/* setting suspend_residency_enable field in SUSP_CTRL to '1' */
HW_WR_FIELD32(&usb_handle.p_usbregs_ctlr -> DRD.SUSP_CTRL, CSL_USB3P0SS_CTRL_DRD_SUSP_CTRL_SUSPEND_RESIDENCY_ENABLE, 0x1);
/* for USB host, needs to wait for XHC_READY */
if(usbInitParamsPtr->isHostMode == 1)
{
/* wait for Controller XHC_READY to go 1 */
while(!HW_RD_FIELD32(usbBaseRegs + CSL_USB3P0SS_CTRL_DRD_OTGSTS,
CSL_USB3P0SS_CTRL_DRD_OTGSTS_XHC_READY));
} else {
/* wait for Controller DEV_READY to go 1 */
while(!HW_RD_FIELD32(usbBaseRegs + CSL_USB3P0SS_CTRL_DRD_OTGSTS,
CSL_USB3P0SS_CTRL_DRD_OTGSTS_DEV_READY));
}
return 0;
}
此致、
Tushar