BCM20732S based boards sometimes develop UART failure

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
legic_1490776
Level 5
Level 5
25 likes received 10 likes received First like received

I had previously posted a question related to this problem here:

BCM20732S refuses to program

but I thought I would start a new thread since the problem may not be related to the EEPROM.

I have a design based on the 20732S that overall seems to work quite well.  However, a few boards develop what appears to be a hardware problem with the UART after some period of time in use.  Note that these boards are being used for development, so we reprogram them via the UART frequently (whereas in the application this will only happen once).

What we observe is that we will have a board that is working fine for a long time, and then at some point I try to program it via the UART and the board is no longer detected.  From that point onwards, I can never get it to program again.  There doesn't seem to be any particular event that triggers this, although in one case it happened after the serial line was accidentally disconnected during programming.

In trying to diagnose the problem I put a scope on the RX and TX lines of the UART, and I can see why the chip fails to detect.

Looking at the HCI serial port with a scope, I see unusual spikes on the TX line when the chip is transmitting.  That is, I reset the chip with HCI_RX held high to bring it into the bootloader.  Then, I use the IDE to detect and program.  The IDE first goes through the detection process, and attempts to contact the boot loader over the HCI port by sending a string  ‘ 01 03 0c 00 01 4d fc 05 1c d2 00 00 01 ‘. The chip responds with another string, but the response is garbled because of strange spikes that are occurring at exactly 1/10 the baud rate, at 11.52 kHz.

These spikes can be seen in the attached photo of the scope trace. You can see the blue trace is showing a bit on the TX line -- the chip is trying to respond to the detection string.  However interspersed with the real bits are weird ramping up and spiking glitches.  These are occurring at exactly 11.52kHz.

We are concerned about this problem because we are moving toward production and as yet we don't understand why this happens or what causes it.  It might be OK if it is related to programming failure that only happens in development when we are reprogramming a lot from HCI (vs once in production)... but at this point we are nervous.

One more point to consider: we have found that we needed to add the PMU clock warmup time hack to get our boards to work, is it possible that this problem is somehow related to that?

I tried heating up the chip with a heat gun to see if I could program it, but this did not help.  I have also attempted to hold down SDA on boot to try to reset the EEPROM, which did not work.  I was doubtful that it would help, since the problem seems to be with the UART / bootloader.

So far on our development boards, this has happened on about 10% of the boards overall, which is a pretty high rate.

0 Likes
1 Solution

OK, I have finally found a bizarre solution which appears to allow me to recover devices which have developed this problem.

The solution is to apply power to the device WITH THE UART DISCONNECTED.

Then, connect the UART.  Do not reset the device after connecting the UART, as you would do normally.

At this point, as long as it has not been reset with the UART connected, the device will detect and program properly.

Note that this method will NOT program a device that has a valid program installed, as the already loaded application will start immediately if the UART is not connected on powerup / reset / boot.

However this appears to be the only way to bring back a device that has developed this problem.

I am still not sure what causes this condition, but it appears to be related to interrupting the programming process.

View solution in original post

0 Likes
9 Replies