I've been trying to use the Edison mini breakout board to communicate with my GPS module through the serial port (UART). My GPS module use RX/TX only and does not support RTS/CTS.
When I use the UART1, connect the J16 (USB) to computer and use Intel Arduino SDK to download and debug. The edison board is communicating to my GPS module correctly.
But after I unplug the USB cable from my computer, and use 3.6V Lithium battery to provide power, the edison module is not able to receive any data from my GPS module (I use the wifi to send out the number of data that the edison module received on the Serial Port. The GPS module is able to report data to my computer through serial port).
I noticed that on the last page of the "Intel Edison Breakout Board Hardware Guide", it indicates that there is a known error on all UARTs, and when sleep mode is enabled, a four-wire UART is required. I'm guessing when I use 3.6V lithium battery as power, it goes into sleep mode and requires RTS and CTS on the serial port.
I need to use 3.6V lithium battery to power this without any USB plugin. Anyone has any idea of how I can make this work? Thanks.
Try the battery with higher voltage, it really looks like it's getting underpowered here.
And according to the , section 2.3.1, absolute minimum to have WiFi and Bluetooth is 3.15V, which is quite close to the maximum rating of your battery, so as soon as it's not fully charged, it's not capable of supplying the necessary voltage. Especially if we take into account the fact that 3.6V is nominal, not necessarily the actual rating.
That's my hypothesis in this situation, trying it with another battery would be a very simple test to see if that's really the case.
Thanks for your reply. Actually the battery is fully charged and the voltage is about 4.05V. 3.6V is just the rating of the battery.
I also try plugging the USB to a wall charger (the charger to charge tablets), it has the same problem. My guess is that whenever the mini breakout board is not connected to a computer, somehow it requires 4 wire UART instead of 2 wire UART.
I hope it's not the battery. I thought the voltage range specified for the Edison was primarily designed to run off of a 1S lipo battery. A lipo cell voltage should run between ~4V when fully charged, and should not be run much under 3.3V. That should be well within the 3.1V minimum specified.
Are you using a level converter on the UART? Maybe you're right at the minimum voltage that the GPS module can read when running at 1.8V logic, and the level drops slightly when powered off a battery. That said, the charging circuit should be providing a constant 4.4 volts to the Edison no matter if it's being powered by USB or the battery.
Yes, I think the part after the converter should be fine, my main guess was about the battery's voltage (i.e. the input) dropping too much. 4.05V actually looks good enough (though that's probably without a load, with board connected I guess it's lower than that).
So maybe it's not the battery after all, that was just a version to try.
gzyulin per that errata (and in the reality), only the first character is lost, everything else should go just fine. How sensitive your communication protocol is to losing one character? And, though I don't know more than described there, I was under impression that the low power mode is time-based, not power input-based. I.e. it goes to that mode regardless of how it's powered, but just after a period of UART inactivity (was 5 seconds in earlier builds).
When the battery was plugged in, it still has about 4V. I'm not experiencing losing the first character. The edison module just does not receive anything. And when I unplug the Rx and Tx wire from the edison and plug those wires to a Serial-USB adapter to computer, I can see the GPS module sending out data.
I even simplify the program and it still behave the same:
1. See the code below, once the Serial1 (UART1) receives anything, it will print/write it back to the serial port.
2. Wire the UART1_TX and UART1_RX to my Serial-USB adapter. Use tools like Hyper Terminal to monitor the UART1_TX output.
2. When the USB is plugged in to the computer, I can see the the UART1_TX output whatever message I send to the UART1.
3. When I unplug the USB cable and use battery to power the board, there is no response on the UART1_TX.
The codes look like this:
int c = Serial1.read();
Okay, that's indeed interesting, haven't seen anything like that yet, so I'll let others chime in. In the meanwhile I'd suggest you to try other battery with higher voltage, if you have one, to explore if that helps.
EDIT: Oh, and I assume you are using the latest OS image, WW42, aren't you? If you have an older one, try updating, the problem may be already fixed there.
I don't know whether it's actual because of the OS image. But after I flush the latest image in, everything seems to be working fine. Thanks for all your responses.
Newer image may very well be the answer, folks in the development team are doing awesome job making it better and better each release