Other Parts Discussed in Thread: OMAPL138
Tool/software: TI-RTOS
Working with PDK 1.0.5 on an OMAP L138, using the USB bulk example, we found the driver would some times lock up, waiting for readSem to be signalled.
The patch below fixed this for us. We're hoping someone at TI can verify that this is a problem, and that our fix is correct.
diff -uprN pdk_omapl138_1_0_5-original/packages/ti/drv/usb/src/usb_func/device/usbdbulk.c pdk_omapl138_1_0_5/packages/ti/drv/usb/src/usb_func/device/usbdbulk.c --- pdk_omapl138_1_0_5-original/packages/ti/drv/usb/src/usb_func/device/usbdbulk.c 2018-07-26 19:35:01.000000000 -0700 +++ pdk_omapl138_1_0_5/packages/ti/drv/usb/src/usb_func/device/usbdbulk.c 2018-10-15 13:50:10.643378800 -0700 @@ -918,6 +918,7 @@ int32_t USBD_bulkWrite(USB_Handle handle { if ((dataSize <= DATA_IN_EP_MAX_SIZE) && (dataSize > 0)) { + psInst->eBulkTxState = BULK_STATE_WAIT_DATA; usbSetupEpReq(pGadgetObj, psInst->ucINEndpoint, /* IN EP # */ (uint32_t*)buffer, @@ -925,7 +926,6 @@ int32_t USBD_bulkWrite(USB_Handle handle dataSize, USB_TRANSFER_TYPE_BULK); - psInst->eBulkTxState = BULK_STATE_WAIT_DATA; usb_osalPendLock(psInst->writeSem, SemaphoreP_WAIT_FOREVER); retSize = psInst->usLastTxSize; @@ -972,6 +972,9 @@ int32_t USBD_bulkRead(USB_Handle handle, /* prepare for incoming bulk connection from host */ *dataSize = psInst->usLastRxSize = 0; + /* set state to waiting */ + psInst->eBulkRxState = BULK_STATE_WAIT_DATA; + /* Setup request for the lower layer to be ready for OUT transfer */ usbSetupEpReq(pGadgetObj, psInst->ucOUTEndpoint, @@ -980,9 +983,6 @@ int32_t USBD_bulkRead(USB_Handle handle, DATA_OUT_EP_MAX_SIZE, USB_TRANSFER_TYPE_BULK); - /* set state to waiting */ - psInst->eBulkRxState = BULK_STATE_WAIT_DATA; - usb_osalPendLock(psInst->readSem, SemaphoreP_WAIT_FOREVER); *dataSize = psInst->usLastRxSize;