On Tue, Nov 10, 2015 at 6:58 PM, King, Lawrence email@example.com wrote:
22 Ohms series resistor is fine. When you have something actually connected to the port then it may be necessary to change the resistance (although 22 is usually close enough). The 22 can stay as a place holder, and only those customers needing to fine-tune the signals can change to something different.
I believe that the GPIO drive strength can be modified (and if I am not mistaken it is currently set to 2mA). Please change the drive strength up to 16mA, this should make the low levels lower. Here is a somewhat simplified diagram of the I2C circuit:
[cc'ing Sri ni , he may be able to help me here]
Do you know how to get Linux to change the drive strength on those pins? I assume it is a change to the DT, but I don't know the bindings used for the qualcomm pin controller.
When the SOC pulls it’s output low a number of things start to happen.
The SOC is sinking current from it’s internal pull-up resistor
The SOC is sinking current from the level shifter internal
As the levels drop to about 1V at the left side of the level
shifter the pass transistor starts to turn on.
As the pass transistor turns on the voltage at the right side of
the level shifter also starts to drop and current flows through the pass transistor towards the SOC.
As the levels on the right side of the level shifter get even
lower, the SOC is sinking current from R3, R4, and R5 (all in parallel).
The SOC hits it’s current limit (2mA) and refuses to drive the
output voltage lower.
There is a small voltage drop across the pass transistor in the level shifter but for this simplified computation we can ignore it. Assuming we are using TXS0108E level shifter, approximate values for the resistors are:
R1=40k (assuming you haven’t turned it off)
R2=R3=40k Ohms (actually it starts out as 10kOhms and only after you get below 0.8V does it change to 40kOhms so the calculations below are optimistic)
R4 = 5k Ohms (I am not sure what value you selected for your board)
There is no R4 at the moment. The current board relies on the internal 10k. If any additional pull-up is added then the Grove RGB LCD isn't able to drive the data line low enough to register at the baseboard.
R5 = 2.2k Ohms (depends on what Seed Studio module you have connected, they seen to vary between 2.2k and 10k for the modules I have looked at).
Assuming that the SOC output were able to drive to 0.4V (a nice valid low level, the total current from the 1.8V (Left) side of the level shifters (1.8-0.4=1.4V) would be:
IL = 1.4/R1 + 1.4/R2 = 1.4/40,000 + 1.4/40,000 = 70uA (micro Amps, OK so far)
And on the right side (3.3-0.4=2.9V) (things get worse if you are running a 5.0V device).
IR= 2.9/R3 +2.9/R4 +2.9/R5 = 72uA + 508uA + 1.32mA = 1.97mA
Total current IL + IR = 2.04mA or just above the limit of the SOC. Hence my recommendation to turn the drive strength of the SOC to max (16mA). This should really help your low levels.
One other thing I noticed with the TXS0108E, if you get too much capacitance load on the output (example a Seeed Studio hub and 3 devices, all connected by 6 inch Seeed cables) the output will burst into oscillation at ~35MHz. you can’t see this with a voltmeter, but everything stops working.
That is what I've heard from others is a limitation of this part. If I had more time I would have swapped it out for a different shifter IC, but the schedule of the hack-a-thon means I have to stick with what I've got. :-(
Lawrence King firstname.lastname@example.org
Engineer, Sr. Staff/Manager
Qualcomm Canada Inc.
(905)482-5403 desk (x25403)
*From:* Mark Brown [mailto:email@example.com] *Sent:* Tuesday, November 10, 2015 9:34 AM *To:* Grant Likely firstname.lastname@example.org *Cc:* Akira Tsukamoto email@example.com; David Mandala < firstname.lastname@example.org>; King, Lawrence email@example.com; firstname.lastname@example.org; Gandhi, Ketal email@example.com; George Grey firstname.lastname@example.org; Koen Kooi email@example.com; 96boards-team firstname.lastname@example.org *Subject:* Re: Sensors board Rev B - call for review (v2)
On 10 November 2015 at 14:31, Grant Likely email@example.com wrote:
After doing a bunch of testing here at home, I've got 22ohm resistors in series on the i2c, but I didn't add them to the SPI lines. The SPI lines are driven through a push-pull driver, will it still be necessary to have in-line resistors for SPI?
Not an EE but the SPI designs I've seen with long traces have had them due to reflections.