Would someone please take a look at my level shifting circuit and tell me what’s wrong with it? I’m trying to send data from a Due to an Uno using a simple mosfet level shifting circuit using BS170 fets, but the whole I2C bus goes splat whenever I connect the Uno. There are no shorts so the only thing I can figure is that the mosfets are pulling too much current for the Due? The circuit I’m using is just putting 3.3V on the gate pins of the fets, pulling up the source pins to 3.3v with 10k resistors and pulling the drain pins to 5v with 10k resistors. It’s nothing fancy and I can’t figure out why it’s not working. Any help would be appreciated.
Off the top of my head, check the pinouts on your FETs and think about using 4.7K pullups. And I'm not sanguine about the track routing. Your image resolution isn't good enough to be sure, but it sure looks like you have shorted tracks. Did it pass a DRC?
-
We need to see the actual circuit.
Your selected MOSFET is not a very good choice.
There are far better MOSFETs mind you in SMD SOT-23 packages. -
As mentioned, confirm the transistor lead layout.
1. Check your discrete componet based level shifter against circuit of Fig-1.
Figure-1:
2. It would be wise to check the communication using the following pre-assembled level shifter (Fig-2) and then make your own one using doscrete components.
Figure-2:
The BS107 will work.
It's in the TO-92 through hole package.
Traditionally, the BSS138 is used in this circuit, probably because its maximum threshold voltage is low. But I don't think it comes in a TO-92 package.



