This is my first designing an Arduino 'shield', so I wanted to get some input. This board interfaces with sensors using I2C. A Raspberry Pi interfaces with the Arduino, which reads magnetometer data from six to seven different sensors through an I2C expander. The schematic can be shown below:

I'm using KiCAD as my CAD software, and the following are the parts I'm using:

Arduino Uno Rev. 3 TCA9548A I2C Expander (Breakout) from Adafruit Adafruit HMC5883L Breakout - Triple-Axis Magnetometer from Adafruit

Link to Fabrication Print: https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout?view=all

The magnetometer sensor breakout board consists of six pins, but I'm only using four of the pins. They'll connect to 4-pin headers which I will attach a ribbon cable to, so they will be used from a 1.5 meter distance in a box. The pin layout at the sensor is different but by crossing some wires on the connector at the sensor, I can get the 4-pin configuration shown in the schematic so SDA/SCL will be separated by +5V and GND. I'm designing the Arduino shield which will attach to the Arduino to eliminate the need of a breadboard.

So, for my design, I figured I would add some 10k pull up resistors to make the total pull up resistance be 5k for each sensor SDA/SCL line. The sensors already have a 10k pull up resistor, and by adding another 10k resistor, we can read the sensor from a long distance. I tested all of this on a breadboard with 1.5m wires, and it seems to work out well. I then added some capacitors from the +5V power pin from the Arduino to keep the voltage steady since it has to power a lot of devices.

For the board layout, I have a ground plane on both the top and bottom layer, but I turned it off for the picture to show the routing. For the capacitors and resistors, they're all SMDs using 0805 size standard, so I can easily hand solder them. I placed most of the pull-up resistors on the bottom of the board so as to use as much space as I can. Judging by the size of the Arduino, it shouldn't touch the parts (unless I'm mistaken by the distance from the shield to the board). As a first Arduino shield design, do you see anything wrong with the design that might be a concern? Design-wise, the multiplexer has 0.6 inches (15.24 mm) between the two sides of the pin, so there should be plenty of room for the 0805 resistors. But, would their placement like this have any issues that I don't know about? Similarly, the capacitor values were just picked based off another design that was working off of +5V. I was powering an OpAmp, and the reference design used those values, but now that I'm powering more items, should I go with a larger value?

EDIT: Apologies, but I wanted to clear something up. The part that I used for the TCA9548 I2C expander is a little strange, but I just used a 2x12 part in the schematic and labeled as the TCA9548. I didn't know that it was left to right rather than CCW. Nevertheless, I made sure that the pin placements matched up with the component shown on Adafruit's page, so it is fine.

  • \$\begingroup\$ Minor detail: avoid ground upwards and positive voltages downwards on schematics. \$\endgroup\$
    – Wesley Lee
    Jun 26, 2017 at 19:38
  • \$\begingroup\$ More schematic drawing guidelines. \$\endgroup\$ Jun 26, 2017 at 20:15
  • \$\begingroup\$ This being a Q&A site and your post being a request for design review, you might be better off over on AllAboutCircuits. Some of the regulars are extremely generous and qualified in responding to these sorts of requests \$\endgroup\$ Jun 27, 2017 at 3:26
  • \$\begingroup\$ Minor note: for mounting holes you can just create your own symbol without any pins (just a simple circle), and as a footprint simply add a circle pad, make it NPTH Mechanical with drill size same as pad size. Then you'll have much cleaner schematic, and easier footprint association. \$\endgroup\$ Jul 27, 2017 at 8:15

1 Answer 1


Perhaps it's because I'm not familiar with Kicad, but the sch and pcb symbols for the TCA9548 confuse me.

The sch symbol has non-standard pin locations (back and forth, instead of CCW). For example, nReset should be on Pin3.

Then on the pcb, the labels on the silk overlay don't match what I see in the datasheet for the TSSOP package.

My point: double check the 9548 pin assignments.

Also, I'm sure you realize that the I2C resistors are pull-ups, not pull-downs (as mentioned in your question). The web has some wonderful I2C resistor calculators (for length/speed considerations).

  • \$\begingroup\$ Thanks for your reply Chris. Sorry, I understand the part confusion, being back to forth instead of CCW. I used a 2x12 part in my schematic, and rather than being CCW, it was left to right. The part itself is CCW, and I made sure that the part labels and pins matched up with the actual part, so the schematic part is correct. Regarding the datasheet, here's a link to the 9548 breakout board below. I'm using the breakout board, and I based the part off of it. I'll be sure to change the resistor terminology: learn.adafruit.com/… \$\endgroup\$ Jun 26, 2017 at 19:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.