Silabs CP2104 No Activity on RX TX LEDs Bug – Voltlog #359

In Voltlog #357 I talked about a bug affecting the programming of ESP32 modules via Serial Bootloader, basically the issue was caused by an incorrect reset sequence regarding the EN and IO0 signals and I also showed a fix which involved adding a capacitor to delay the EN line.

Well, this week I’m gonna show you another bug which I encountered recently but this time with the CP2104 USB to serial converter chip from Silabs. So recently I designed this little board called VoltLink, it’s basically a usb to serial converter board but one that also integrates the auto-reset circuitry needed for programming Espressif modules like the ESP8266 & ESP32. I also have a 1mm pitch JST-SH connector with a standard pinout that I use in all of my designs and this helps with space savings on small circuit boards.

Well after assembling one of these boards, I connected it to my computer, the new virtual serial port was created and I thought everything was running fine, except it wasn’t. I quickly discovered that the status LEDs were not reacting when there was communication on the serial lines. I don’t know about you but I want my status LEDs to be functional, it helps me get a quick visual understanding of the communication happening on the serial lines. I don’t need anything specific, I just need to know that there is activity and if there is a lot of activity or less activity.

A fatal error occurred: Failed to connect to ESP32 – Voltlog #357

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header. This is an error on which I have spent long hours trying to figure out what’s causing it and how to fix it. If you are struggling with the same error on Windows, stick with me, I’ll show you how to fix it.

For example in my case, the issue manifests itself on a single windows computer out of 4 tested and it doesn’t really matter at which baud rate I’m trying to upload it can be 115K or 900K, it doesn’t matter if you are using Arduino IDE or PlatformIO, I still get the error because it’s not caused by the IDE. And also I’ve experienced this with both FTDI and Silabs chips. Sometimes the behavior can be random, meaning it might work 1 out of 10 tries which can get really frustrating, especially if it happens in the most inappropriate times as these problems tend to happen.

First I tried understanding the issue, this is clearly a problem with how the ESP32 resets, it doesn’t go into the correct bootloader mode for code upload. By looking at this repository which is managed by Espressif we get some info on the expected sequence, and we learn that the ESP32 should have GPIO0 pulled low during reset for it to go into serial bootloader mode. Reset is triggered by pulling the EN or Reset pin low. They don’t give us a clear timing diagram of what this should look like but I’m going to assume the state of GPIO0 is read while EN signal goes back high to release it from reset. So the logic thing was to put a scope on these signals and check it out.

VoltLink™ A Fancy USB Serial Adapter (ESP32 Programmer) – Voltlog #356

Welcome to a new Voltlog, today I’ll be showing you how I created my own usb to serial adapter board and we’ll go through some of the design decisions I had to make and I will explain the reasoning behind making these choices but first let me tell you the background of the story, Personally I’ve always liked having my own usb to serial adapter and here is one that I designed something like 10 years ago maybe more. The layout is not great, my PCB skills were obviously not as good as they are today but nonetheless, I created this adapter as an exercise but also for the important purpose of having a reliable and flexible tool. Reliable because I could control the chip that I’m using. It was a Silabs CP2103 and I was getting it from a well known distributor.

Flexible because I had all the IOs of the chip broen out to 0.1 inch headers which could mean that I had the option to trigger a reset on a particular board or something along those lines. And I’ve also designed other adapters based on FTDI chips and more recently based on the CH340 family of chinese chips. 

So this brings me to today’s project, I designed this new adapter for two reasons: one is the good old reason of reliability, you can’t trust the adapters you’re getting from aliexpress, they’re almost always using fake chips and generally are of lower build quality. I want a reliable CP2104 series chip in here, I want it to be able to sustain high bit rates for fast uploading of firmware images to target boards.

Reverse Battery Protection With Mosfet (no voltage drop) – Voltlog #353

Welcome to a new Voltlog, today we’re going to be talking about reverse battery protection, I’m gonna be showing you a few methods for achieving this protection but I’m going to be focusing specifically on low power designs, where you might be using let’s say a single coin cell battery.

When we’re talking about higher input voltages, battery protection is pretty simple, you can simply add an inline Schottky diode, if the input voltage is reversed, the diode will be reversed biased and it will block the current flow. There is about 0.5V voltage drop on your diode but if you have a 9V input into a 5V regulator, there’s plenty of margin to afford losing half a volt. There is also the power dissipation to consider in that case, so you multiply the current with the voltage drop and you get your power dissipation into the diode, you pick an appropriate diode capable of dissipating that and the problem is solved.

Now when you start talking about low power devices, specifically those powered by coin cells, it gets a little tricky to get some reverse polarity protection into your circuit. Because our battery voltage is now just 3V we can’t afford losing 0.5V on our input diode, that will ruin our battery life, it will waste the little precious energy we have stored in the coin cell and might prevent our circuit from powering up.

Best Technique For Soldering & Inspecting BGA Chips – Voltlog #352

Welcome to a new Voltlog, in this video I’m gonna show you my method of soldering BGA chips because in the previous video where I showed the eMMC to microSD card adapter PCB I mentioned I don’t use any stencil for soldering the WFBGA153 package. I’m also gonna be showing you a method for easily checking if the BGA chip is soldered correctly or not.

So let’s start by talking about the BGA package that I used in this project, it’s the WFBGA153, this package has 153 lead-free balls, each is 0.3mm diameter and the pitch between balls is 0.5mm. Now the footprint that I used has 0.35mm pads for each of these balls, which means that when you consider the 0.5mm pitch, in between pads you are left with just 0.15mm which is roughly 6 mil, you basically can’t route any tracks in there using any of the standard PCB services.

eMMC Flash Memory To microSD Card Adapter – Voltlog #351

Welcome to a new Voltlog, today we’ll be talking about eMMC memory chips and how you can use them in your next project and whether or not they provide any advantage over a more traditional sd card.

So historically MMC memory was first and then SD memory cards were developed based on MMC specification but added new features. Both technologies are based on some form of flash memory and they both contain a controller in the same package with the memory. Electrically it’s the same interface for both in most cases however software-wise SD card ads some new features which are not supported in the MMC standard. While standard MMC comes in a card form similar to how SD memory cards are, eMMC stands for embedded MMC and it comes in a BGA package. 

The purpose of eMMC is to be used as non-volatile storage in embedded devices and almost all mobile phones and tablets used this form of flash for main storage up to 2016, when UFS started to become more popular.

 

How To Interface A GC9A01 Round Display With Arduino & ESP32 – Voltlog #349

I’m gonna start this video with a question, do you agree that technological advancements as well as market demand for technology is making our hobby nicer and more accessible by providing us with parts and tools that are cheaper and easier to get now than ever before.

That’s how I feel when as a hobbyist I can get my hands on parts and tools that just a few years ago were out of reach due to them being top hard to source, too expensive and too technically challenging as well. Here is one example, this is a 1.3 inch, 240x240pixels round display and it even comes installed on this nice little breakout board with 0.1 inch header connections. You can get such a module for cheap on aliexpress and I’ll place some links to this in the description below so you can check it out.

And no, the interface to this display is not some complex and hard to implement LVDS interface, it’s a very simple SPI interface that you are probably already familiar with. So join me in this video to learn how to connect these types of display modules to your favorite development board and you can drive them to display pictures and animations.

JTAG Adapter PCB 20pin 2.54mm to 10pin 1.27mm – Voltlog #347

Welcome to a new Voltlog, this will be a rather short project video, I thought I’d start the year with something simple. If you’ve ever used JTAG before, either to program or debug an ARM processor, or something like an ESP32 or maybe to load a bitstream into an FPGA, you’ve likely encountered the ubiquitous 20 pin JTAG connector which is this 2×10 0.1inch spaced connector. It’s a rather large connector, it takes up a lot of space on a PCB, you don’t really need that many pins but you can’t go without it because it’s usually present on the fully featured programmer/debugging tools. Here is an example: this is an ST-Link V2, or to be precise a cheap clone from aliexpress but for the purpose of this discussion it doesn’t matter, it looks the same as the original and it has this 20 pin JTAG connector. 

And to some extent this isn’t really a problem if you are using big development boards like this STM32F4 dev board that I got from Aliexpress. This features the same 20 pin connector for programming so it’s a matter of connecting a simple ribbon cable and you’re up and running. However, most modern boards that you are going to be designing might not have enough space to install such a big connector, you might for example use the simpler 10 pin JTAG connection, cause you don’t even need that many signals, most of the pins are GND anyway on the 20 pin connection. And instead of using 2.54mm pin header you can use something smaller like half the size, 1.27mm, and this can save a lot of space on a board.