Code Monkey home page Code Monkey logo

arduino-cmsis-dap's Introduction

arduino-cmsis-dap

CMSIS-DAP USB-SWD/JTAG HID adapter firmware for Pro Micro and Teensy 3.2 boards

Copyright (C) 2016 Phillip Pearson [email protected]

based on the CMSIS-DAP Interface Firmware

Copyright (c) 2009-2013 ARM Limited

This is a port of the core of ARM's CMSIS-DAP firmware to the Arduino environment, which lets you turn a Pro Micro (or $3.50 clone from China) or Teensy 3.2 into a CMSIS-DAP USB adapter, which you can use with OpenOCD and mbed to program and debug ARM chips using the SWD protocol, and also with OpenOCD to program and debug various chips using JTAG.

See arduino-cmsis-dap.ino for installation details.

arduino-cmsis-dap's People

Contributors

lalten avatar lanserge avatar myelin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arduino-cmsis-dap's Issues

Teensy hangs after a few commands due to USB serial port buffering

The firmware defaults to enabling DAP_SERIAL_LOG in DAP_config.h, which is the USB serial port on the Teensy. Things will work until some number of bytes have been buffered, and then the Teensy will hang waiting for a USB host to drain the buffer, which will never happen since the firmware is built in Raw HID mode and there is no where for these bytes to go.

image

This was a challenge to debug since I wasn't sure if I could trust the Teensy, the jumper cables, the devices under test, etc.

My quick fix was to move the debugging to Serial1, which is the hardware serial port, so that I could use the logging if I run into additional problems with OpenOCD.

diff --git a/arduino-cmsis-dap.ino b/arduino-cmsis-dap.ino
index fbb2c7d..abebf8d 100644
--- a/arduino-cmsis-dap.ino
+++ b/arduino-cmsis-dap.ino
@@ -92,7 +92,7 @@ uint8_t rawhidResponse[DAP_PACKET_SIZE];
 
 
 void setup() {
-  Serial.begin(115200);
+  Serial1.begin(115200);
 
   DAP_Setup();
 
@@ -113,17 +113,17 @@ void loop() {
 #endif
   if (bytesAvailable > 0) {
 #if DAP_SERIAL_LOG
-    Serial.print("cmd ");
-    Serial.print(rawhidRequest[0], HEX);
-    Serial.print(" ");
-    Serial.print(rawhidRequest[1], HEX);
-    Serial.print(" ");
+    Serial1.print("cmd ");
+    Serial1.print(rawhidRequest[0], HEX);
+    Serial1.print(" ");
+    Serial1.print(rawhidRequest[1], HEX);
+    Serial1.print(" ");
 #endif /* DAP_SERIAL_LOG */
     auto sz = DAP_ProcessCommand(rawhidRequest, rawhidResponse);
 #if DAP_SERIAL_LOG
-    Serial.print("rsp ");
-    Serial.print(sz);
-    Serial.println(" B");
+    Serial1.print("rsp ");
+    Serial1.print(sz);
+    Serial1.println(" B");
 #endif /* DAP_SERIAL_LOG */
 #ifdef HIDPROJECT_RAWHID
     RawHID.enable(); // signal that we're ready to receive another buffer

SWIM support

I wanted to flash a 4.12 VESC motor controller, which apparently needs SWIM.

Any chance you could add this feature?

#include "HID-Project.h" missing in the project?

Hello @myelin,

I have an arduino Pro Mini and I would like to try your software out since I need a cheap yet working OpenOCD friendly CMSIS-DAP interface :)

I followed the instructions in the sketch but unfortunately there's a header missing... what am I doing wrong?

Arduino:1.6.12 (Mac OS X), Kort:"Arduino Pro or Pro Mini, ATmega328 (5V, 16 MHz)"

/Applications/Arduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/romanvg/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/romanvg/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/romanvg/Documents/Arduino/libraries -fqbn=arduino:avr:pro:cpu=16MHzatmega328 -ide-version=10612 -build-path /var/folders/rb/k3q8j6j53_d5fcns670ntm380000gn/T/arduino_build_452253 -warnings=default -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=/Users/romanvg/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino6 -prefs=runtime.tools.avr-gcc.path=/Users/romanvg/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2 -verbose /Users/romanvg/dev/arduino-cmsis-dap/arduino-cmsis-dap.ino
/Applications/Arduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Arduino.app/Contents/Java/hardware -hardware /Users/romanvg/Library/Arduino15/packages -tools /Applications/Arduino.app/Contents/Java/tools-builder -tools /Applications/Arduino.app/Contents/Java/hardware/tools/avr -tools /Users/romanvg/Library/Arduino15/packages -built-in-libraries /Applications/Arduino.app/Contents/Java/libraries -libraries /Users/romanvg/Documents/Arduino/libraries -fqbn=arduino:avr:pro:cpu=16MHzatmega328 -ide-version=10612 -build-path /var/folders/rb/k3q8j6j53_d5fcns670ntm380000gn/T/arduino_build_452253 -warnings=default -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=/Users/romanvg/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino6 -prefs=runtime.tools.avr-gcc.path=/Users/romanvg/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2 -verbose /Users/romanvg/dev/arduino-cmsis-dap/arduino-cmsis-dap.ino
Using board 'pro' from platform in folder: /Users/romanvg/Library/Arduino15/packages/arduino/hardware/avr/1.6.14
Using core 'arduino' from platform in folder: /Users/romanvg/Library/Arduino15/packages/arduino/hardware/avr/1.6.14
Detecting libraries used...
"/Users/romanvg/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-I/Users/romanvg/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/romanvg/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/eightanaloginputs" "/var/folders/rb/k3q8j6j53_d5fcns670ntm380000gn/T/arduino_build_452253/sketch/arduino-cmsis-dap.ino.cpp" -o "/dev/null"
"/Users/romanvg/Library/Arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.3-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics  -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR   "-I/Users/romanvg/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/cores/arduino" "-I/Users/romanvg/Library/Arduino15/packages/arduino/hardware/avr/1.6.14/variants/eightanaloginputs" "/var/folders/rb/k3q8j6j53_d5fcns670ntm380000gn/T/arduino_build_452253/sketch/arduino-cmsis-dap.ino.cpp" -o "/var/folders/rb/k3q8j6j53_d5fcns670ntm380000gn/T/arduino_build_452253/preproc/ctags_target_for_gcc_minus_e.cpp"
In file included from /Users/romanvg/dev/arduino-cmsis-dap/arduino-cmsis-dap.ino:68:0:
/var/folders/rb/k3q8j6j53_d5fcns670ntm380000gn/T/arduino_build_452253/sketch/DAP_config.h:7:25: fatal error: HID-Project.h: No such file or directory
 #include "HID-Project.h"
                         ^
compilation terminated.
exit status 1
Error compiling for board Arduino Pro or Pro Mini.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.