1
\$\begingroup\$

I designed the following the STM32F407vgt6 custom board for a project.

enter image description hereenter image description hereenter image description here

I recently soldered the parts, and powered the board up. I tried programming the board via an STM32F429 Discovery board through the SWD interface and got plenty of errors indicating the MCU was being kept under reset. Then I probed the NRST pin and read a value of 0.40 volts.

The MCU is brand new. All the decoupling capacitors seem to be getting enough voltage(2.9 volts). Regulator works fine too. I am not sure why the NRST pin is at low voltage. Here's the relevant part of the board layout. enter image description here

edit1: This is a two-layer board with the top layer being GND+signal and bottom being VDD+signal. I think it's worth mentioning that sometimes the NRST goes down to 0.20 volts. It just varies around 0.20 - 0.40.

I can add a picture of the board if you guys want to see the if there's anything wrong with soldering. Here are the pictures of the board. Notice that I tried to cut the VCAP line, but it didn't help assuming I successfully cut the line.

enter image description hereenter image description hereenter image description here

update

I pulled the NRST pin high. After that, I was able to connect and program the MCU via the STM32F429 board through the ST-Link utility. ST-Link utility states that the memory is programmed and verified. I wrote a small program that toggles a few GPIO pins, but when I measure the voltage on those pins I don't see them going high(3V) or low(0V). They just vary around irrelavant values(1.2V, 0.4V, 0.9V etc.).

\$\endgroup\$
  • \$\begingroup\$ If you find that adding an extra resistor pull does not pull up then you may have to consider the consequences of electrostatic discharge damage. \$\endgroup\$ – Sunnyskyguy EE75 Jun 10 '18 at 18:48
  • \$\begingroup\$ @TonyStewartolderthandirt I'm not saying adding an extra resistor wouldn't help. I'm just saying it shouldn't be needed in the first place. \$\endgroup\$ – zeke Jun 10 '18 at 18:50
  • \$\begingroup\$ If you follow my suggestions you’ll find the root cause \$\endgroup\$ – Sunnyskyguy EE75 Jun 10 '18 at 20:21
  • 1
    \$\begingroup\$ @TonyStewartolderthandirt Your suggestion is a "fix" for the problem. I don't see how it's gonna help us find the the root cause \$\endgroup\$ – zeke Jun 10 '18 at 21:42
  • 1
    \$\begingroup\$ Your power plane is not poured in your picture; hopefully it actually is on your board. Also make sure that your IC is not rotated 90 degrees on the footprint; it is an easy mistake to make (hint, the writing on the chip does not match the orientation on the data sheet, you need to use the pin 1 marker and not the writing) \$\endgroup\$ – Chris Stratton Jun 11 '18 at 2:42
3
\$\begingroup\$

One possible explanation for NRST being low, is that it is being driven low by the MCU. That is possible because the STM32 family will drive that external NRST pin, when any of the internal reset modules want to reset the MCU. The obvious candidate in this case, is the power reset, if there is a power-related problem. This diagram is taken from the ST AN4488 application note referenced below:

STM32F4 reset circuit

Since you report that NRST is at 0.4V and not an even lower voltage, it seems unlikely that the reset switch itself is the cause, but it's worth checking that.

On a quick first review of your design, I see 2 main areas of concern:

  • BOOT1 is floating

    Although, with BOOT0 grounded the actual logic level of BOOT1 doesn't affect the boot mode (as shown in table 6 from ST AN4488 referenced below), I haven't seen a design where BOOT1 pin is left floating. While I doubt it would cause the specific symptom you report, I would fix it at a valid logic level. FYI the STM32F4 reference designs have 10k resistors in series with both BOOT pins, before they are then pulled high or low externally, as required.

  • VCAP1 and VCAP2 are connected

    This is my main concern. I haven't seen the internal MCU architecture to show the difference between these two pins (which decouple the internal 1.2V power domain of the MCU core), but notice that in the ST "AN4488: Getting started with STM32F4xxxx MCU hardware development" document, these two pins are each separately connected to a 2.2uF capacitor - and not, as shown in your schematic & PCB, connected together and then jointly connected to two 2.2uF capacitors.

    Some of the text about this in the above document is a little ambiguous, but the reference schematic on PDF page 34 is clear about how those pins should be used:

    VCAP connections from STM32F4 reference schematic

    Looking at your PCB layout, it seems that you can just cut the track linking your capacitors C11 and C13 to perform the necessary separation. Also, make sure you are using the specified type of capacitors, if you aren't doing so already.

    My hypothesis is that this incorrect connection between the two VCAP pins, might be causing the MCU to keep its internal power reset asserted, which is what you are measuring as the logic low (0.4V) on the NRST pin.


I recommend reading the whole of that document, including section 9.3 titled "MCU does not work properly", which may give you more ideas of areas to investigate.

\$\endgroup\$
  • 1
    \$\begingroup\$ I don't know how I missed that VCAP connection part when designing the board. That's an obvious design flaw of my board. Thanks for pointing that out. I will try to cut the line between the caps and see if it helps. For what it's worth, I did go through the above document during the design phase, but somehow missed some details. \$\endgroup\$ – zeke Jun 11 '18 at 11:57
0
\$\begingroup\$

You probably require a pull-up resistor - 10K or so from the reset pin to Vcc - to ensure that the reset pin is High when the reset button is not pressed.

\$\endgroup\$
  • 1
    \$\begingroup\$ This is not really required since the NRST pin is internally pulled high. Reference design does not include a pull-up resistor for the pin either. \$\endgroup\$ – zeke Jun 10 '18 at 18:37
  • \$\begingroup\$ If unused inputs are initialized, they should not be floating. \$\endgroup\$ – Sunnyskyguy EE75 Jun 10 '18 at 19:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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