Electronics Microcontrollers "/>

StLink v2 problem: Wrong device detected

01 October 2019 at 8:39 pm

Article image for StLink v2 problem: Wrong device detected

I just spent way too much time on not finding the correct answer to a very simple issue, so posting it for others to find. I’m currently working on a project where I use the popular STM32F103C8T6 (as used in the nice and cheap BluePill boards). After a long evening of successful compiles, I suddenly got the error “Wrong device detected”.

The complete error message was like this:

Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD 
adapter_nsrst_delay: 100 
adapter speed: 950 kHz 
Info : clock speed 950 kHz 
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748 
Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748 
Info : using stlink api v2 Info : Target voltage: 3.262028 
Error: init mode failed (unable to connect to the target) 
in procedure 'init' 
in procedure 'ocd_bouncer' 

Now that was odd? I didn’t change much or did I? After a lot of Googling I realised that I had uploaded a Firmware that did NOT include SWD support. As soon as you upload a firmware that does not feature SWD support, you obviously cannot use it any more. You deleted it after all, right? Duhh… I mistakenly thought this was a hardware feature and when you remove this support you can’t use a debugger that only uses software reset (hardware reset will still work).

So - if you use ST-Link V2 or a similar cheap JTAG debuggers, be sure to either lay out a reset pin next to your SWD pins? Or you can do like I did, temporarily hold a wire from ground to the NRST pin on the STM32, release it and trigger an upload. You basically have to do the reset manually. Once a firmware with SWD support is flashed,you can use your trusted STLINK V2 again 😊

So - when using STM32CubeMX to generate a project, always turn on Serial Wire debugging for all projects!

Always turn on SWD in STM32CubeMX
Always turn on SWD in STM32CubeMX

Other similar errors

If you get the error above, but the output looks more like this, it can be that you have swapped the SWDIO and SWCLK wires:

Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 4000 kHz
adapter_nsrst_delay: 100
Info : clock speed 4000 kHz
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 3.262028
Error: init mode failed (unable to connect to the target)
in procedure 'program' 
in procedure 'init' called at file "embedded:startup.tcl", line 495
in procedure 'ocd_bouncer'
** OpenOCD init failed **
shutdown command invoked