Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
7 years, 12 months ago.
LPC11U35 USBSerial
Hello, I use USBserial for my project and it is powered by Li-pol battery. My first problem was that the code was not launch without USB connection. It was solved by connect_blocking = false but there is next problem during disconnecting USB cable from PC. When I disconnect cable from PC then the code is stoped but when I shutdown PC with connected USB cable then is everything ok and the code continues.
code
#include "mbed.h" #include "USBSerial.h" #include "MODSERIAL.h" static const uint8_t VCELL_MSB = 0x02; //Read only static const uint8_t VCELL_LSB = 0x03; //Read only static const uint8_t SOC_MSB = 0x04; //Read only static const uint8_t SOC_LSB = 0x05; //Read only static const uint8_t MODE_MSB = 0x06; //Write only static const uint8_t MODE_LSB = 0x07; //Write only static const uint8_t VERSION_MSB = 0x08; //Read only static const uint8_t VERSION_LSB = 0x09; //Read only static const uint8_t CONFIG_MSB = 0x0C; //Read/write static const uint8_t CONFIG_LSB = 0x0D; //Read/write static const uint8_t COMMAND_MSB = 0xFE; //Write only static const uint8_t COMMAND_LSB = 0xFF; //Write only static const uint16_t RST_CODE = 0x5400; //reset code for COMMAND 16-bit register static const uint16_t QUICKSTART = 0x4000; //Levels static const float DIV_VCELL = 1.25e-3; //1.25 mV/level static const float DIV_SOC = 0.00390625; //1/256% / level DigitalOut LedStatus(P0_13); DigitalOut LedBattery(P0_14); I2C i2c(P0_5, P0_4); USBSerial usb(0x1f00, 0x2012, 0x0001, false); //MODSERIAL uart(P0_19, P0_18); Serial uart(P0_19, P0_18); InterruptIn GPS_fix(P0_17); //void Rx_interrupt(MODSERIAL_IRQ_INFO *q) void Rx_interrupt() { LedBattery = !LedBattery; usb.putc(uart.getc()); } void toogle() { LedStatus = !LedStatus; } int SOC() { char cmd[1]; char data_read[1]; __disable_irq(); cmd[0] = 0x04; i2c.write(108, cmd, 1); i2c.read(109, data_read, 1); __enable_irq(); return data_read[0]; } int main() { char cmd[2]; i2c.frequency(400000); cmd[0] = 0x00; cmd[1] = 0x54; i2c.write(108, cmd, 2); cmd[0] = 0x4000; i2c.write(108, cmd, 1); GPS_fix.rise(&toogle); uart.baud(9600); uart.attach(&Rx_interrupt, Serial::RxIrq); while(1) { wait(1); usb.printf("SOC: %d\r\n", SOC()); } }
Hello Peter,
I recommend you to start with something more simple. Like for instance the code below:
posted by Zoltan Hudak 25 Dec 2016Check how it performs in both cases you described above (I have tested the code above with this and this demo an it worked OK). Then extend the code little by little to see when things go wrong.
Hello Zoltan,
I added LED to get an information that my board is still alive. So, i disconnected USB cable from PC and LED was permanent off or on. It means the code was frozen. It is very bad feature. I do not know why. But i am surprised that when I turn off my PC with connected USB the problem does not occur and LED continues its flashing.
Hello Peter,
posted by Zoltan Hudak 26 Dec 2016That is strange. Because when I run the code above with my boards (see the links above) the LED remains flashing and the UART serial port keeps sending messages even in case I disconnect the USB cable. Then when I reconnect the USB cable I see the USB serial messages on the PC's terminal again.
Hello Zoltan,
are those boards powered by external power or battery and not USB ? Maybe I have a bug in my circuit.
posted by Peter Augustin 26 Dec 2016The boards are powered from external source.
One more thing I'd like to mention is that I could not see how you control the USB connect resistor. I recommend you to add something like below and see how it works:
Hello Zoltan,
The control of USB connect does not help. Please, see video and green LED on board.
https://drive.google.com/uc?id=0B_OOjYgNKTK-R1NKOVVmX0c3YUE&export=download
posted by Peter Augustin 26 Dec 2016It wouldn't be a clean solution but now that the program starts without having the USB cable connected a watchdog could be a reasonable workaround.
Hello Zoltan,
i added vbug flag for checking USB is present. Now the board is working super but this is not good solutions. What do You think is it possible that USBSerial library has a bug ?
Hello Peter,
posted by Zoltan Hudak 29 Dec 2016Good job. I'm glad that you finally found a solution. From programming point of view, USB is a quite complex protocol. So no surprise when something does not work perfectly yet in mbed. In addition, not all mbed boards are supported yet. Actually (officially) LPC11U35 isn't. Anyway, I'm very thankful to mbed people for developing the USBDevice stack for us users.
I needed low cost MCU with small package size and drag and drop flashing. The LPC11U35FHN33/401 is good for my project. I would like to know if it is possible to send bug report to someone.
Thanks for your support.
posted by Peter Augustin 29 Dec 2016