3.3V serial connection with M6E-Nano RFID reader

I have a “SparkFun Simultaneous RFID Reader” which I need to connect to a Raspberry Pi, without using a serial <> USB converter. I know I could use a level shifter to reduce the voltage to a Pi compatible 3v3, but I don’t have one to hand and don’t want to have to wait for a delivery. I saw in the datasheet for the M6E-Nano that the serial port actually operates at 3v3, but the Sparkfun board has a TXB0104 level converter on it, which ups that to 5v. Is there an easy way to bypass or disable this level conversion? Grateful for suggestions!

You’ll have to solder directly from the M6E Nano module and disconnect the power from the convertor. That will be heavy modification and I can not guarantee that it will operate as intended. Please proceed with caution.

That’s what I feared. I’m working on site and neither have a microscope or a proper soldering station with me, only a Portasol gas pen. I also don’t have a spare RFID module, so if I mess it up… And even if I don’t, I just spotted this ominous warning on [page 56 of the design guide:

! CAUTION !

The RX input line and all GPIO lines configured as inputs must be low when the module is turned off and low just before the module is turned on. If input lines are high at the time the module is being powered up,we have seen corruption of memory occur that cannot be remedied except at the factory. The RX input line can be assured to be in a safe state if it is driven by a buffer circuit that is powered by the Nano module as shown in the Nano carrier board design. That way, the input Voltage to the RX pin can never be higher than the DC supply voltage into the Nano module because the buffer is powered by the Nano module.

Sounds like they found this bug only after going into production… Since a buffer is required I would guess the best/only option would be to drive the [TXB0104’s “Port B” with 3v3 instead of 5V? The design guide shows Pin 10 V3R3 being used for a similar purpose.](https://www.ti.com/lit/ds/symlink/txb0104.pdf)](https://cdn.sparkfun.com/datasheets/Sensors/ID/Nano_Design_Guide_rev01E.pdf#page=56)

Aaaand… maybe not. From the Sparkfun schematic:

This buffer does not operate when VCCA > VCCB. VCC must be greater than 3.3V.

But the TXB0104 datasheet seems to suggest otherwise:

VCCA must be less than or equal to VCCB and must not exceed 3.6 V.

I’m confused. :?

Basically, what I’m hoping might work is to cut the 5V power to the TXB0104’s pin 14 (VCCB) and jumper it across to pin 1 (VCCA). Now both sides of the level converter would operate at 3.3v, effectively turning it into a plain buffer. This has the benefit of being pretty easy to do even with the limited tools I have to hand - and should be undoable as well by removing the jumper wire and repairing the cut track. But will the TXB0104 operate correctly when VCCA = VCCB? The Internet has so far failed to provide a clear answer.

[This thread on TI’s support forum seems to suggest that VCCA < VCCB is fine as long as VCCB - VCCA <= 0.3V. Of course in my case it would be 0V, so that’s encouraging.](TXB0104-Q1: VCCA > VCCB - Logic forum - Logic - TI E2E support forums)

Having looked carefully at the M6E design guidelines, the Simultaneous Tag Reader schematic and the TXB0104 datasheet I decided to put a jumper between the TXB0104’s output enable pin (pin 8) and VCCB (pin 14). I verified the connection between TXB0104 pin 8 and pin 10 on the M6E module (V3R3) first, then carefully lifted pin 14 off the board with the help of a needle, while heating it with my soldering iron. It wasn’t too hard to attach the jumper, but I had to use the macro on my camera to verify proper soldering - far too small to see clearly! A small piece of heat-shrink tubing was added to keep the pin isolated from the pad, and I later added a drop of hot-melt glue to hold the jumper wire in place.

https://i.imgur.com/yKk9qRIl.jpg

After confirming I now had 3.3V on the TX pin I hooked up RX, TX and GND to a Pi3B, redirected ttyAMA0 from the Bluetooth radio to the GPIO pins and used the [Python-MercuryAPI wrapper to knock out a quick test script:

#!/usr/bin/env python3
import mercury

reader = mercury.Reader("tmr:///dev/ttyAMA0", baudrate=115200)

print(reader.get_model())
print(reader.get_supported_regions())
reader.set_region("EU3")
reader.set_read_plan([1], "GEN2", read_power=1900)
print(reader.read())
print(reader.get_temperature())


Aaaaand… success! :smiley:

$ python test.py 
M6e Nano
['NA2', 'NA3', 'IN', 'JP', 'PRC', 'EU3', 'KR2', 'AU', 'NZ', 'open']
[b'300ED89F33500040018211F9', b'300ED89F33500040018211E9', b'300ED89F33500040018211FF', b'300ED89F33500040018213B5']
36

(The output is: model name, available regions, a single shot read of four tags and finally the chip temperature)

Long story short, it seems the TXB0104 is perfectly happy with VCCA == VCCB == 3.3V, and with this modification the Simultaneous Tag Reader board can be connected directly to a Pi, without having to involve an Arduino, UART <> USB converter, or level shifter.](GitHub - gotthardp/python-mercuryapi: Python wrapper for the ThingMagic Mercury API)