NOTE: I AM USING A WINDOWS COMPUTER WITH AN INTEL I7 PROCESSOR
USB CONNECTIVITY AND DATA TRANSFER ISSUES
These are the approaches I have followed to get the USB connection this far:
On both cases, I find the program on the MCU side getting stuck in the stage where it tries to check if the connection has been enabled. I am also sending you the copy of the codes I am using on both the MCU side as well as the host side.
PS: I have also tried running the program on the host side using other programming languages such as C and C# initially using the libusb and libusbdotnet libraries, both when run, give me the same error on the MCU side as I have already mentioned in the other messages we’ve conversed about – gets stuck on the checking for connection loop.
PROGRAM ON MCU and HOST SIDE:
MCU SIDE PROGRAM
#include "board.h"
#include <stdio.h>
#include <string.h>
#include "libusbdev.h"
/* The size of the packet buffer. */
#define PACKET_BUFFER_SIZE 4096
/* Application defined LUSB interrupt status */
#define LUSB_DATA_PENDING _BIT(0)
/* Packet buffer for processing */
static uint8_t g_rxBuff[PACKET_BUFFER_SIZE];
int main(void)
{
/* Initialize board and chip */
SystemCoreClockUpdate();
Board_Init();
/* Init USB subsystem and LibUSBDevice */
libusbdev_init(USB_STACK_MEM_BASE, USB_STACK_MEM_SIZE);
while (1) {
/* wait until host is connected */
while (libusbdev_Connected() == 0) {
/* Sleep until next IRQ happens */
__WFI(); à Gets stuck in this loop, libusbdev_Connected() always is 0.
}
while (libusbdev_Connected()) {
if (libusbdev_QueueReadDone() != -1) {
/* Dummy process read data ......*/
/* requeue read request */
libusbdev_QueueReadReq(g_rxBuff, PACKET_BUFFER_SIZE);
}
if (libusbdev_QueueSendDone() == 0) {
/* Queue send request */
libusbdev_QueueSendReq(g_rxBuff, PACKET_BUFFER_SIZE);
}
}
}
}
PROGRAM ON HOST SIDE:
Since I am using python, the program is quite easy to understand. Here, dev is the device that’s found using the “find” function of the usb.core - library.
dev1 = usb.core.find(idVendor = 0x1fc9, idProduct = 0x0090)
>>> print(dev1)
OUTPUT:
DEVICE ID 1fc9:0090 on Bus 001 Address 027 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x200 USB 2.0
bDeviceClass : 0xef Miscellaneous
bDeviceSubClass : 0x2
bDeviceProtocol : 0x1
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0x1fc9
idProduct : 0x0090
bcdDevice : 0x100 Device 1.0
iManufacturer : 0x1 NXP Semiconductors
iProduct : 0x2 LPC-LINK2 DATA PORT
iSerialNumber : 0x3 I3FWNUOV
bNumConfigurations : 0x1
CONFIGURATION 1: 500 mA ==================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x2 Configuration
wTotalLength : 0xab (171 bytes)
bNumInterfaces : 0x5
bConfigurationValue : 0x1
iConfiguration : 0x0
bmAttributes : 0x80 Bus Powered
bMaxPower : 0xfa (500 mA)
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x2
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x4 Error Accessing String
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x400 (1024 bytes)
bInterval : 0x4
ENDPOINT 0x1: Interrupt OUT ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x1 OUT
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x400 (1024 bytes)
bInterval : 0x4
INTERFACE 4: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x4
bAlternateSetting : 0x0
bNumEndpoints : 0x2
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x7 Error Accessing String
ENDPOINT 0x84: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x84 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x400 (1024 bytes)
bInterval : 0x1
ENDPOINT 0x4: Interrupt OUT ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x4 OUT
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x400 (1024 bytes)
bInterval : 0x1
INTERFACE 1: CDC Communication =========================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x1
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x2 CDC Communication
bInterfaceSubClass : 0x2
bInterfaceProtocol : 0x0
iInterface : 0x5 Error Accessing String
ENDPOINT 0x83: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x83 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x10 (16 bytes)
bInterval : 0x4
INTERFACE 2: CDC Data ==================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x2
bAlternateSetting : 0x0
bNumEndpoints : 0x2
bInterfaceClass : 0xa CDC Data
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x5 Error Accessing String
ENDPOINT 0x2: Bulk OUT ===============================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x2 OUT
bmAttributes : 0x2 Bulk
wMaxPacketSize : 0x200 (512 bytes)
bInterval : 0x0
ENDPOINT 0x82: Bulk IN ===============================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x82 IN
bmAttributes : 0x2 Bulk
wMaxPacketSize : 0x200 (512 bytes)
bInterval : 0x0
INTERFACE 3: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x3
bAlternateSetting : 0x0
bNumEndpoints : 0x2
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x6 Error Accessing String
ENDPOINT 0x85: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x85 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x40 (64 bytes)
bInterval : 0x2
ENDPOINT 0x5: Interrupt OUT ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x5 OUT
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x40 (64 bytes)
bInterval : 0x2
>>> cfg =devs.set_configuration() -> Sets the configuration to active mode.
>>> intf = cfg[(0,0)] -> This is the interface, here interface 0.
>>> print(intf)
OUTPUT:
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x2
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x4 Error Accessing String
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x400 (1024 bytes)
bInterval : 0x4
ENDPOINT 0x1: Interrupt OUT ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x1 OUT
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x400 (1024 bytes)
bInterval : 0x4
>>> ep = usb.util.find_descriptor( intf, custom_match = lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)
>>> print(ep)
OUTPUT:
ENDPOINT 0x1: Interrupt OUT ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x1 OUT
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x400 (1024 bytes)
bInterval : 0x4
>>> ep.write('test')
ERROR:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\viswe\AppData\Local\Programs\Python\Python37-32\lib\site-packages\usb\core.py", line 387, in write
return self.device.write(self, data, timeout)
File "C:\Users\viswe\AppData\Local\Programs\Python\Python37-32\lib\site-packages\usb\core.py", line 948, in write
self.__get_timeout(timeout)
File "C:\Users\viswe\AppData\Local\Programs\Python\Python37-32\lib\site-packages\usb\backend\libusb1.py", line 842, in intr_write
timeout)
File "C:\Users\viswe\AppData\Local\Programs\Python\Python37-32\lib\site-packages\usb\backend\libusb1.py", line 920, in __write
_check(retval)
File "C:\Users\viswe\AppData\Local\Programs\Python\Python37-32\lib\site-packages\usb\backend\libusb1.py", line 595, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 5] Input/Output Error
I have tried to do everything from either side, but I haven’t understood why this is not working.
I am trying to use the dotnet libusb library again to find if that works, if I had done something wrong in the first trial.
Please let me know if you find I have understood something conceptually wrong. I am really concerned about the time I am spending on the USB connectivity problem, any help from your side is really appreciated.
Hi,
First of all, sorry for the later reply.
I did a test with [usbd_rom_libusb] example of lpcopen_3_02_keil_iar_lpclink2_4370 software package with LPC-Link2 board.
Below is my pc info for your reference:
I downloaded [Zadig] v2.0.1 (Build 160) from here.
When I plug in LPC-Link2 board, I could find below device at PC device management:
If I replace WinUSB at Zadig and install the driver.
There will make below change:
For I don't have the LibusbK host side applications, I couldn't do related test.
If you have the same behavior as my test?
Thanks for the attention.
Have a great day,
Mike
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Hi,
I do have the same behavior on Zadig end. I am not able to transfer data though.
Regards,
Vish