Dear RIOT development team,

Attempting to flash with the edbg driver instead of OpenOCD results in an error 
when using the Vagrant VM as building edbg requires the libudev-dev package, 
which is not included in the image and cannot be found in the configured 
package repositories either.

gcc  -W -Wall -Wextra -O2 -std=gnu99 dap.c edbg.c target.c target_atmel_cm0p.c 
target_atmel_cm3.c target_atmel_cm4.c target_atmel_cm7.c dbg_lin.c -ludev -o 
edbg
dbg_lin.c:42:21: fatal error: libudev.h: No such file or directory
#include <libudev.h>
                     ^
compilation terminated.
Makefile:43: recipe for target 'edbg' failed
make[2]: *** [edbg] Error 1
Makefile:10: recipe for target 'all' failed
make[1]: *** [all] Error 2
/home/vagrant/RIOT/makefiles/tools/targets.inc.mk:14: recipe for target 
'/home/vagrant/RIOT/dist/tools/edbg/edbg' failed
make: *** [/home/vagrant/RIOT/dist/tools/edbg/edbg] Error 2 

A possible workaround would be switching to OpenOCD but I’m getting the 
following error when trying to flash applications on my Atmel samr21-xpro board 
with OpenOCD:

Error: at91samr21g18.cpu -- clearing lockup after double fault
Polling target at91samr21g18.cpu failed, trying to reexamine
Info : at91samr21g18.cpu: hardware has 4 breakpoints, 2 watchpoints
    TargetName         Type       Endian TapName            State
--  ------------------ ---------- ------ ------------------ ------------
0* at91samr21g18.cpu  cortex_m   little at91samr21g18.cpu  halted
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x61000000 pc: 0x000003ec msp: 0x20000200
auto erase enabled
Info : SAMD MCU: SAMR21G18A (256KB Flash, 32KB RAM)
Error: error writing data: (null)
Info : SWD IDCODE 0x0bc11477
Error: Failed to write memory at 0x41004006
Error: Failed to erase row containing 0000af00
Error: SAMD: failed to erase sector 2
Error: failed erasing sectors 0 to 3

../../Makefile.include:364: recipe for target 'flash' failed
make: *** [flash] Error 1

As such, I have resorted to building edbg myself outside of Vagrant (in lxss), 
however, I get another error message then:

             Error: unknown target device (DSU_DID = 0x10010319)

Apparently I’m using an unconsidered revision of the Atmel samr21-xpro board. I 
could fix this by adding the following line to static device_t devices[] in 
/dist/tools/edbg/bin/target_atmel_cm0p.c:

             { 0x10010319, "SAM R21G18A",         0, 256*1024, 64, 4096, 256 },

Flashing now works, though very inconsistently. Very often, the flashing will 
fail with a connection timeout that can happen both during the programming and 
verification phases. The larger the binary file to flash, the more likely the 
connection is to timeout. I’ve been able to flash smaller binaries with OpenOCD 
so I suspect a similar or the same problem is at fault when using OpenOCD, 
causing the error message above. Unfortunately, I don’t know where the root of 
the problem is. At least with OpenOCD I have tried different boards and 
different USB cables to no avail. I can try other boards with edbg on Monday 
but I expect them to fail as well, in which case a problem with the particular 
board shouldn’t be the root cause (this is reinforced by the fact that somebody 
else tried to flash larger binaries on my board via OpenOCD, which did work, 
albeit not using a VM but directly on Linux). Other possible root causes could 
be a problem with either Vagrant (less likely in my opinion), Oracle VM 
VirtualBox, my host OS (Windows 10 version 1703) or even my particular PC 
hardware (Surface Pro 3) but I don’t know how I could proceed further to 
identify the cause.

If you’d like I can create a pull request for the change to 
/dist/tools/edbg/bin/target_atmel_cm0p.c and/or add issues to the repo for the 
problems described.

Best regards,
Adrian (student of Freie Universität Berlin)


_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel

Reply via email to