Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Development
  3. GUIDE - NRF5 / NRF51 / NRF52 for beginners

GUIDE - NRF5 / NRF51 / NRF52 for beginners

Scheduled Pinned Locked Moved Development
102 Posts 26 Posters 18.2k Views 26 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ileneken3I ileneken3

    @ileneken3
    After giving up on the cheap (illegal?) ST-LINK and J-LINK boards, I decided to make my life easy and get a NRF-DK. Unfortunately, even that is not easy enough . I did manage to use nRFgo Studio to flash a pre-built .hex file (blinky_pca10040.hex) to the EBYTE E73 module. I know it works because I attached an LED to a pin on the module and I see it blinks. But I can't do what I really want - flash a simple Mysensors sketch (preferably with the Arduino IDE).
    Everything compiles OK, I'm using the very latest MyBoardNRF5 board definition (including the Sandeep Mistry libraries). But the Arduino IDE won't recognize the J-LINK programmer that is built into the DK board. (Maybe that's not expected to work?)

    As a workaround, from the Arduino IDE, I select "Export compiled Binary", and then use the resultant .hex file with nRFgo Studio to flash the board. Everything seems fine, but I get no indication from the gateway that any wireless traffic is received from the board - so I assume it is not working at all. Below is the sketch.

    #define MY_RADIO_NRF5_ESB
    #define MY_DEBUG
    #define MY_NODE_ID 10 // 0x0a nrf test
    #define CHILD_ID 55  // Id of the sensor child
    
    #include <SPI.h>
    #include <MySensors.h>
    
    
    // Initialize motion message
    MyMessage msg(CHILD_ID, V_TRIPPED);
    
    
    bool value = 1;
    void setup() {
      Serial.println("I am starting");
    
        send(msg.set(value)); // Get things started
        
      // initialize digital pin LED_BUILTIN as an output.
      //pinMode(13, OUTPUT);
    }
    
    void presentation()  {
    
      sendSketchInfo("NRF52", "0.9");
    
      present(CHILD_ID, S_MOTION);
    }
    void loop() {
      Serial.println("I am in a loop");
      //digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
      //delay(3000);                       // wait for a second
      //digitalWrite(LED_BUILTIN, LOW);    
      delay(3000);                       // wait for a second
    
    }
    

    P.S.
    I have not managed to get any console output using the TX/RX pins to work either.
    It would really brighten up my holidays if someone could point me in the right direction!

    Thanks,

    O Offline
    O Offline
    Omemanti
    wrote on last edited by Omemanti
    #18

    @ileneken3 1. how did you wire the DK tot the target module?

    https://forum.mysensors.org/topic/6961/nrf5-action/1744

    1. What is the error the Arduino IDE produces?
    2. Can you also post the myboardnrf(sounds like..) files?

    FYI, I both use the stlink and nrf52832-DK for programming. And I'm pretty sure the stlink I use is not so original. 2 dollar each.

    ileneken3I 1 Reply Last reply
    0
    • O Omemanti

      @ileneken3 1. how did you wire the DK tot the target module?

      https://forum.mysensors.org/topic/6961/nrf5-action/1744

      1. What is the error the Arduino IDE produces?
      2. Can you also post the myboardnrf(sounds like..) files?

      FYI, I both use the stlink and nrf52832-DK for programming. And I'm pretty sure the stlink I use is not so original. 2 dollar each.

      ileneken3I Offline
      ileneken3I Offline
      ileneken3
      wrote on last edited by
      #19

      @omemanti

      1. I wired the DK to the target exactly as described in the article, and as drawn in the picture:
        https://devzone.nordicsemi.com/f/nordic-q-a/20536/programming-external-custom-nrf52832-board-using-nrf52-dk
        I am assuming everything is correct in the wiring, because I was able to flash the blinky pre-compiled hex file and it works.
      2. When selecting J-Link as the programmer, the error from the Arduino IDE is:

      C:\Users\krakman\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/jlink.cfg -c transport select swd; set WORKAREASIZE 0; -f target/nrf52.cfg -c program {{C:\Users\krakman\AppData\Local\Temp\arduino_build_268238/MyBoardNRF5tst.ino.hex}} verify reset; shutdown;
      Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
      Licensed under GNU GPL v2
      For bug reports, read
      http://openocd.org/doc/doxygen/bugs.html
      debug_level: 2
      0
      adapter speed: 10000 kHz
      cortex_m reset_config sysresetreq
      jaylink: Failed to open device: LIBUSB_ERROR_NOT_FOUND.
      Info : No device selected, using first device.
      Error: No J-Link device found.
      Error: No Valid JTAG Interface Configured.
      Error: No Valid JTAG Interface Configured.

      /*
        If you don't use an nRF5 board, you can ignore this file.
        
        This file was part of the "My Sensors nRF5 Boards" board repository
        available at https://github.com/mysensors/ArduinoBoards If you have
        questions, please refer the documentation at
        https://github.com/mysensors/ArduinoHwNRF5 first.
        
        This file is compatible with ArduinoHwNRF5 >= 0.2.0
      
        This file allows you to change the relation between pins referenced in
        the Arduino IDE (0..31) and pins of the nRF5 MCU (P0.00..P0.31).
        
        If you can live with addressing the GPIO pins by using the Arduino pins
        0..31 instead of a custom mapping, don't change this file. If you have
        a lot of Arduino code with fixed pin numbers and you need to map these
        pins to specific pins of the nRF5 MCU; you need to change this file.
        
        If you fill the "g_APinDescription" Array with numbers between 0..31,
        the Arduino pins 0..31 are assigned to pins P0.00..P0.31 of the MCU.
        
        As an example, if you need to change the pin mapping for Arduino pin 5
        to P0.12 of the MCU, you have to write the 12 after PORT0 into the sixth
        position in the  "g_APinDescription" Array.
         
        The extended attributes only affects the nRF5 variants provided with
        official Arduino boards. The arduino-nrf5 variant ignores the extended
        attributes.
          
        The pin mapping effects commands like "pinMode()", "digitalWrite()",
        "analogRead()" and "analogWrite()".
        
        If you change the pin mapping, you have to modify the pins in
        "MyBoardNRF5.h". Especially the analog pin mapping must be replaced with
        your pin numbers by replacing PIN_AIN0..7 with a number of your mapping
        array. You can use the constants PIN_AIN0..7 in the "g_APinDescription"
        Array if you want to reference analog ports MCU independent. You cannot
        use the pins P0.00 and P0.01 for GPIO, when the 32kHz crystal is connected.
      
        
        ###########################################################################
      
        Copyright (c) 2014-2015 Arduino LLC.  All right reserved.
        Copyright (c) 2016 Arduino Srl.  All right reserved.
        Copyright (c) 2017 Sensnology AB. All right reserved.
      
        This library is free software; you can redistribute it and/or
        modify it under the terms of the GNU Lesser General Public
        License as published by the Free Software Foundation; either
        version 2.1 of the License, or (at your option) any later version.
      
        This library is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
        See the GNU Lesser General Public License for more details.
      
        You should have received a copy of the GNU Lesser General Public
        License along with this library; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
      */
      
      
      
      #ifdef MYBOARDNRF5
      #include <variant.h>
      
      /*
       * Pins descriptions. Attributes are ignored by arduino-nrf5 variant. 
       * Definition taken from Arduino Primo Core with ordered ports
       */
      const PinDescription g_APinDescription[]=
      {
        { NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
        { NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
        { PORT0,  2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
        { PORT0,  3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
        { PORT0,  4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
        { PORT0,  5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
        { PORT0,  6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
        { PORT0,  7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
        { PORT0,  8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER},    //USER_LED
        { PORT0,  9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
        { PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
        { PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
        { PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
        { PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
        { PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
        { PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
        { PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
        { PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
        { PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
        { PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
        { PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
        { PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
        { PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
        { PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
        { PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
        { PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER},   //RED_LED
        { PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER},  //GREEN_LED
        { PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER},  //BLUE_LED
        { PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
        { PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
        { PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
        { PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
      };
      
      // Don't remove this line
      #include <compat_pin_mapping.h>
      
      #endif
      
      /*
        If you don't use an nRF5 board, you can ignore this file.
      
        This file was part of the "My Sensors nRF5 Boards" board repository
        available at https://github.com/mysensors/ArduinoBoards If you have
        questions, please refer the documentation at
        https://github.com/mysensors/ArduinoHwNRF5 first.
      
        This file is compatible with ArduinoHwNRF5 >= 0.2.0
      
        This file allows you to change the pins of internal hardware, like the
        serial port, SPI bus or Wire bus.
      
        All pins referenced here are mapped via the "g_ADigitalPinMap" Array
        defined in "MyBoardNRF5.cpp" to pins of the MCU.
        
        As an example, if you have at the third position in "g_ADigitalPinMap" the
        12, then all ports referenced in Arduino with 2 are mapped to P0.12. If you
        don't change the "g_ADigitalPinMap" Array, the Arduino pins 0..31 are
        translated to P0.00..P0..31.
         
        ###########################################################################
       
        This file is compatible with ArduinoHwNRF5 > 0.1.0
        Copyright (c) 2014-2015 Arduino LLC.  All right reserved.
        Copyright (c) 2016 Sandeep Mistry. All right reserved.
        Copyright (c) 2017 Sensnology AB. All right reserved.
      
        This library is free software; you can redistribute it and/or
        modify it under the terms of the GNU Lesser General Public
        License as published by the Free Software Foundation; either
        version 2.1 of the License, or (at your option) any later version.
        This library is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
        See the GNU Lesser General Public License for more details.
        You should have received a copy of the GNU Lesser General Public
        License along with this library; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
      */
      
      #ifndef _MYBOARDNRF5_H_
      #define _MYBOARDNRF5_H_
      
      #ifdef __cplusplus
      extern "C"
      {
      #endif // __cplusplus
      
      // Number of pins defined in PinDescription array
      #define PINS_COUNT           (32u)
      #define NUM_DIGITAL_PINS     (32u)
      #define NUM_ANALOG_INPUTS    (8u)
      #define NUM_ANALOG_OUTPUTS   (8u)
      
      /* 
       *  LEDs
       *  
       *  This is optional
       *  
       *  With My Sensors, you can use
       *  hwPinMode() instead of pinMode()
       *  hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
       *  https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
       *
       */
      #define PIN_LED1                (8)
      // #define PIN_LED2                (25)
      // #define PIN_LED3                (26)
      // #define PIN_LED4                (27)
      // #define PIN_LED5                (12)
      // #define PIN_LED6                (14)
      // #define PIN_LED7                (15)
      // #define PIN_LED8                (16)
      // #define USER_LED             	 (PIN_LED2)
      // #define RED_LED                 (PIN_LED3)
      // #define GREEN_LED            	 (PIN_LED4)
      // #define BLUE_LED			           (PIN_LED1)
      // #define BLE_LED                 BLUE_LED
      #define LED_BUILTIN          PIN_LED1
      
      /* 
       *  Buttons
       *  
       *  This is optional
       */
      // #define PIN_BUTTON1             (3)
      // #define PIN_BUTTON2             (4)
      // #define PIN_BUTTON3             (5)
      // #define PIN_BUTTON4             (6)
      // #define PIN_BUTTON5             (7)
      // #define PIN_BUTTON6             (8)
      // #define PIN_BUTTON7             (9)
      // #define PIN_BUTTON8             (10)
      
      /* 
       * Analog ports
       *  
       * If you change g_APinDescription, replace PIN_AIN0 with
       * port numbers mapped by the g_APinDescription Array.
       * You can add PIN_AIN0 to the g_APinDescription Array if
       * you want provide analog ports MCU independed, you can add
       * PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
       * defined in MyBoardNRF5.cpp
       */
      static const uint8_t A0  = ADC_A0;
      static const uint8_t A1  = ADC_A1;
      static const uint8_t A2  = ADC_A2;
      static const uint8_t A3  = ADC_A3;
      static const uint8_t A4  = ADC_A4;
      static const uint8_t A5  = ADC_A5;
      static const uint8_t A6  = ADC_A6;
      static const uint8_t A7  = ADC_A7;
      
      /*
       * Serial interfaces
       * 
       * RX and TX are required.
       * If you have no serial port, use unused pins
       * CTS and RTS are optional.
       */
       /*
      #define PIN_SERIAL_RX       (12)
      #define PIN_SERIAL_TX       (11) 
      */
      // I changed this....
      #define PIN_SERIAL_RX       (13)
      #define PIN_SERIAL_TX       (14)
      // #define PIN_SERIAL_CTS      (13)
      // #define PIN_SERIAL_RTS      (14)
      
      /*
       * SPI Interfaces
       * 
       * This is optional
       * 
       * If SPI is defined MISO, MOSI, SCK are required
       * SS is optional and can be used in your sketch.
       */
      #define SPI_INTERFACES_COUNT 1
      
      #define PIN_SPI_MISO         (2)
      #define PIN_SPI_MOSI         (3)
      #define PIN_SPI_SCK          (4)
      #define PIN_SPI_SS           (5)
      
      static const uint8_t SS   = PIN_SPI_SS;
      static const uint8_t MOSI = PIN_SPI_MOSI;
      static const uint8_t MISO = PIN_SPI_MISO;
      static const uint8_t SCK  = PIN_SPI_SCK;
      
      /*
       * Wire Interfaces
       *
       * This is optional
       */
      #define WIRE_INTERFACES_COUNT 2
      
      #define PIN_WIRE_SDA         (13u)
      #define PIN_WIRE_SCL         (14u)
      
      #define PIN_WIRE_SDA1        (15u)
      #define PIN_WIRE_SCL1        (16u)
      
      static const uint8_t SDA = PIN_WIRE_SDA;
      static const uint8_t SCL = PIN_WIRE_SCL;
      
      #ifdef __cplusplus
      }
      #endif
      
      #endif
      
      ileneken3I 1 Reply Last reply
      0
      • ileneken3I ileneken3

        @omemanti

        1. I wired the DK to the target exactly as described in the article, and as drawn in the picture:
          https://devzone.nordicsemi.com/f/nordic-q-a/20536/programming-external-custom-nrf52832-board-using-nrf52-dk
          I am assuming everything is correct in the wiring, because I was able to flash the blinky pre-compiled hex file and it works.
        2. When selecting J-Link as the programmer, the error from the Arduino IDE is:

        C:\Users\krakman\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/jlink.cfg -c transport select swd; set WORKAREASIZE 0; -f target/nrf52.cfg -c program {{C:\Users\krakman\AppData\Local\Temp\arduino_build_268238/MyBoardNRF5tst.ino.hex}} verify reset; shutdown;
        Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
        Licensed under GNU GPL v2
        For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
        debug_level: 2
        0
        adapter speed: 10000 kHz
        cortex_m reset_config sysresetreq
        jaylink: Failed to open device: LIBUSB_ERROR_NOT_FOUND.
        Info : No device selected, using first device.
        Error: No J-Link device found.
        Error: No Valid JTAG Interface Configured.
        Error: No Valid JTAG Interface Configured.

        /*
          If you don't use an nRF5 board, you can ignore this file.
          
          This file was part of the "My Sensors nRF5 Boards" board repository
          available at https://github.com/mysensors/ArduinoBoards If you have
          questions, please refer the documentation at
          https://github.com/mysensors/ArduinoHwNRF5 first.
          
          This file is compatible with ArduinoHwNRF5 >= 0.2.0
        
          This file allows you to change the relation between pins referenced in
          the Arduino IDE (0..31) and pins of the nRF5 MCU (P0.00..P0.31).
          
          If you can live with addressing the GPIO pins by using the Arduino pins
          0..31 instead of a custom mapping, don't change this file. If you have
          a lot of Arduino code with fixed pin numbers and you need to map these
          pins to specific pins of the nRF5 MCU; you need to change this file.
          
          If you fill the "g_APinDescription" Array with numbers between 0..31,
          the Arduino pins 0..31 are assigned to pins P0.00..P0.31 of the MCU.
          
          As an example, if you need to change the pin mapping for Arduino pin 5
          to P0.12 of the MCU, you have to write the 12 after PORT0 into the sixth
          position in the  "g_APinDescription" Array.
           
          The extended attributes only affects the nRF5 variants provided with
          official Arduino boards. The arduino-nrf5 variant ignores the extended
          attributes.
            
          The pin mapping effects commands like "pinMode()", "digitalWrite()",
          "analogRead()" and "analogWrite()".
          
          If you change the pin mapping, you have to modify the pins in
          "MyBoardNRF5.h". Especially the analog pin mapping must be replaced with
          your pin numbers by replacing PIN_AIN0..7 with a number of your mapping
          array. You can use the constants PIN_AIN0..7 in the "g_APinDescription"
          Array if you want to reference analog ports MCU independent. You cannot
          use the pins P0.00 and P0.01 for GPIO, when the 32kHz crystal is connected.
        
          
          ###########################################################################
        
          Copyright (c) 2014-2015 Arduino LLC.  All right reserved.
          Copyright (c) 2016 Arduino Srl.  All right reserved.
          Copyright (c) 2017 Sensnology AB. All right reserved.
        
          This library is free software; you can redistribute it and/or
          modify it under the terms of the GNU Lesser General Public
          License as published by the Free Software Foundation; either
          version 2.1 of the License, or (at your option) any later version.
        
          This library is distributed in the hope that it will be useful,
          but WITHOUT ANY WARRANTY; without even the implied warranty of
          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
          See the GNU Lesser General Public License for more details.
        
          You should have received a copy of the GNU Lesser General Public
          License along with this library; if not, write to the Free Software
          Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
        */
        
        
        
        #ifdef MYBOARDNRF5
        #include <variant.h>
        
        /*
         * Pins descriptions. Attributes are ignored by arduino-nrf5 variant. 
         * Definition taken from Arduino Primo Core with ordered ports
         */
        const PinDescription g_APinDescription[]=
        {
          { NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
          { NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
          { PORT0,  2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
          { PORT0,  3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
          { PORT0,  4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
          { PORT0,  5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
          { PORT0,  6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
          { PORT0,  7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
          { PORT0,  8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER},    //USER_LED
          { PORT0,  9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
          { PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
          { PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
          { PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
          { PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
          { PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
          { PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
          { PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
          { PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
          { PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
          { PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
          { PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
          { PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
          { PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
          { PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
          { PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
          { PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER},   //RED_LED
          { PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER},  //GREEN_LED
          { PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER},  //BLUE_LED
          { PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
          { PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
          { PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
          { PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
        };
        
        // Don't remove this line
        #include <compat_pin_mapping.h>
        
        #endif
        
        /*
          If you don't use an nRF5 board, you can ignore this file.
        
          This file was part of the "My Sensors nRF5 Boards" board repository
          available at https://github.com/mysensors/ArduinoBoards If you have
          questions, please refer the documentation at
          https://github.com/mysensors/ArduinoHwNRF5 first.
        
          This file is compatible with ArduinoHwNRF5 >= 0.2.0
        
          This file allows you to change the pins of internal hardware, like the
          serial port, SPI bus or Wire bus.
        
          All pins referenced here are mapped via the "g_ADigitalPinMap" Array
          defined in "MyBoardNRF5.cpp" to pins of the MCU.
          
          As an example, if you have at the third position in "g_ADigitalPinMap" the
          12, then all ports referenced in Arduino with 2 are mapped to P0.12. If you
          don't change the "g_ADigitalPinMap" Array, the Arduino pins 0..31 are
          translated to P0.00..P0..31.
           
          ###########################################################################
         
          This file is compatible with ArduinoHwNRF5 > 0.1.0
          Copyright (c) 2014-2015 Arduino LLC.  All right reserved.
          Copyright (c) 2016 Sandeep Mistry. All right reserved.
          Copyright (c) 2017 Sensnology AB. All right reserved.
        
          This library is free software; you can redistribute it and/or
          modify it under the terms of the GNU Lesser General Public
          License as published by the Free Software Foundation; either
          version 2.1 of the License, or (at your option) any later version.
          This library is distributed in the hope that it will be useful,
          but WITHOUT ANY WARRANTY; without even the implied warranty of
          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
          See the GNU Lesser General Public License for more details.
          You should have received a copy of the GNU Lesser General Public
          License along with this library; if not, write to the Free Software
          Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
        */
        
        #ifndef _MYBOARDNRF5_H_
        #define _MYBOARDNRF5_H_
        
        #ifdef __cplusplus
        extern "C"
        {
        #endif // __cplusplus
        
        // Number of pins defined in PinDescription array
        #define PINS_COUNT           (32u)
        #define NUM_DIGITAL_PINS     (32u)
        #define NUM_ANALOG_INPUTS    (8u)
        #define NUM_ANALOG_OUTPUTS   (8u)
        
        /* 
         *  LEDs
         *  
         *  This is optional
         *  
         *  With My Sensors, you can use
         *  hwPinMode() instead of pinMode()
         *  hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
         *  https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
         *
         */
        #define PIN_LED1                (8)
        // #define PIN_LED2                (25)
        // #define PIN_LED3                (26)
        // #define PIN_LED4                (27)
        // #define PIN_LED5                (12)
        // #define PIN_LED6                (14)
        // #define PIN_LED7                (15)
        // #define PIN_LED8                (16)
        // #define USER_LED             	 (PIN_LED2)
        // #define RED_LED                 (PIN_LED3)
        // #define GREEN_LED            	 (PIN_LED4)
        // #define BLUE_LED			           (PIN_LED1)
        // #define BLE_LED                 BLUE_LED
        #define LED_BUILTIN          PIN_LED1
        
        /* 
         *  Buttons
         *  
         *  This is optional
         */
        // #define PIN_BUTTON1             (3)
        // #define PIN_BUTTON2             (4)
        // #define PIN_BUTTON3             (5)
        // #define PIN_BUTTON4             (6)
        // #define PIN_BUTTON5             (7)
        // #define PIN_BUTTON6             (8)
        // #define PIN_BUTTON7             (9)
        // #define PIN_BUTTON8             (10)
        
        /* 
         * Analog ports
         *  
         * If you change g_APinDescription, replace PIN_AIN0 with
         * port numbers mapped by the g_APinDescription Array.
         * You can add PIN_AIN0 to the g_APinDescription Array if
         * you want provide analog ports MCU independed, you can add
         * PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
         * defined in MyBoardNRF5.cpp
         */
        static const uint8_t A0  = ADC_A0;
        static const uint8_t A1  = ADC_A1;
        static const uint8_t A2  = ADC_A2;
        static const uint8_t A3  = ADC_A3;
        static const uint8_t A4  = ADC_A4;
        static const uint8_t A5  = ADC_A5;
        static const uint8_t A6  = ADC_A6;
        static const uint8_t A7  = ADC_A7;
        
        /*
         * Serial interfaces
         * 
         * RX and TX are required.
         * If you have no serial port, use unused pins
         * CTS and RTS are optional.
         */
         /*
        #define PIN_SERIAL_RX       (12)
        #define PIN_SERIAL_TX       (11) 
        */
        // I changed this....
        #define PIN_SERIAL_RX       (13)
        #define PIN_SERIAL_TX       (14)
        // #define PIN_SERIAL_CTS      (13)
        // #define PIN_SERIAL_RTS      (14)
        
        /*
         * SPI Interfaces
         * 
         * This is optional
         * 
         * If SPI is defined MISO, MOSI, SCK are required
         * SS is optional and can be used in your sketch.
         */
        #define SPI_INTERFACES_COUNT 1
        
        #define PIN_SPI_MISO         (2)
        #define PIN_SPI_MOSI         (3)
        #define PIN_SPI_SCK          (4)
        #define PIN_SPI_SS           (5)
        
        static const uint8_t SS   = PIN_SPI_SS;
        static const uint8_t MOSI = PIN_SPI_MOSI;
        static const uint8_t MISO = PIN_SPI_MISO;
        static const uint8_t SCK  = PIN_SPI_SCK;
        
        /*
         * Wire Interfaces
         *
         * This is optional
         */
        #define WIRE_INTERFACES_COUNT 2
        
        #define PIN_WIRE_SDA         (13u)
        #define PIN_WIRE_SCL         (14u)
        
        #define PIN_WIRE_SDA1        (15u)
        #define PIN_WIRE_SCL1        (16u)
        
        static const uint8_t SDA = PIN_WIRE_SDA;
        static const uint8_t SCL = PIN_WIRE_SCL;
        
        #ifdef __cplusplus
        }
        #endif
        
        #endif
        
        ileneken3I Offline
        ileneken3I Offline
        ileneken3
        wrote on last edited by
        #20

        @ileneken3
        OK, I fixed one layer of the problem! I removed the JLINK driver using Device Manager, then re-installed using Zadig. Now the Arduino IDE tells me it is programmed without a problem.
        But the next layer of the problem still exists, the programmed board doesn't seem to send anything to the gateway. I am monitoring this from the logs of mysgw, and from Domoticz. I am expecting the gateway to see something from the node, at least the registration.

        Thanks again

        O 1 Reply Last reply
        0
        • ileneken3I ileneken3

          @ileneken3
          OK, I fixed one layer of the problem! I removed the JLINK driver using Device Manager, then re-installed using Zadig. Now the Arduino IDE tells me it is programmed without a problem.
          But the next layer of the problem still exists, the programmed board doesn't seem to send anything to the gateway. I am monitoring this from the logs of mysgw, and from Domoticz. I am expecting the gateway to see something from the node, at least the registration.

          Thanks again

          O Offline
          O Offline
          Omemanti
          wrote on last edited by Omemanti
          #21

          @ileneken3 Have you considered building a new gateway with a nrf52?
          You know now that the IDE is programming correctly. Try combining a ftdi and nrf52 to get a serial gateway.

          Also I would hook up the gateway and prototype board to a serial monitor. ( So both boards onto my PC)
          You can both monitor the node and the gateway directly from the RX and use https://www.mysensors.org/controller/myscontroller to act as controller.
          I find it handy to cut out things like domoticz when troubleshooting (the less variables the better)

          ileneken3I 1 Reply Last reply
          0
          • O Omemanti

            @ileneken3 Have you considered building a new gateway with a nrf52?
            You know now that the IDE is programming correctly. Try combining a ftdi and nrf52 to get a serial gateway.

            Also I would hook up the gateway and prototype board to a serial monitor. ( So both boards onto my PC)
            You can both monitor the node and the gateway directly from the RX and use https://www.mysensors.org/controller/myscontroller to act as controller.
            I find it handy to cut out things like domoticz when troubleshooting (the less variables the better)

            ileneken3I Offline
            ileneken3I Offline
            ileneken3
            wrote on last edited by
            #22

            @omemanti
            I was looking at the output of mysgw running on a Raspberry PI - so Domoticz is not really in the picture. But - your advise made me think I should try programming the chip on the development board directly before using an external one. And it works! I can see the registration of the Mysensors device.
            So I guess everything is OK in terms of IDE and Mysensors code, and there must be something wrong with my external board. I will have to try a different one, and/or look over the soldering.

            Happy Holidays!

            1 Reply Last reply
            0
            • NeverDieN Offline
              NeverDieN Offline
              NeverDie
              Hero Member
              wrote on last edited by
              #23

              Just paste your hex file to the JLINK drive that appears when you connect your DK. That will handle the upload for you. It's as simple as that.

              ileneken3I 1 Reply Last reply
              0
              • NeverDieN NeverDie

                Just paste your hex file to the JLINK drive that appears when you connect your DK. That will handle the upload for you. It's as simple as that.

                ileneken3I Offline
                ileneken3I Offline
                ileneken3
                wrote on last edited by
                #24

                @neverdie
                Unfortunately, nothing is that simple - at least for me. I have gone in circles with the J-LINK drivers. In order to use the Arduino IDE for programming, you must use the WinUSB driver installed by Zadig. But if you do that, the nRFgo Studio no longer recognizes any J-LINK device. So I re-install RFgo Studio, and then I can't use the Arduino IDE anymore!

                But I can work around those issues, because everything programs and works right when programming the device on the NRF DK board. The problem is I can't do anything with the two external boards I tried. With one, I was able to unlock it with a "Recover" in nRFgo Studio, but the programming doesn't seem to cause the chip to do anything (nothing logged by the gateway). With the other, I can't unlock the board - it always says: "Recover failed: Unknown error".
                Both boards are E73 - but one is marked as E73-2G4M04S and the other is E73-2G4M04S1B.

                Any ideas?

                O NeverDieN 2 Replies Last reply
                0
                • ileneken3I ileneken3

                  @neverdie
                  Unfortunately, nothing is that simple - at least for me. I have gone in circles with the J-LINK drivers. In order to use the Arduino IDE for programming, you must use the WinUSB driver installed by Zadig. But if you do that, the nRFgo Studio no longer recognizes any J-LINK device. So I re-install RFgo Studio, and then I can't use the Arduino IDE anymore!

                  But I can work around those issues, because everything programs and works right when programming the device on the NRF DK board. The problem is I can't do anything with the two external boards I tried. With one, I was able to unlock it with a "Recover" in nRFgo Studio, but the programming doesn't seem to cause the chip to do anything (nothing logged by the gateway). With the other, I can't unlock the board - it always says: "Recover failed: Unknown error".
                  Both boards are E73 - but one is marked as E73-2G4M04S and the other is E73-2G4M04S1B.

                  Any ideas?

                  O Offline
                  O Offline
                  Omemanti
                  wrote on last edited by Omemanti
                  #25

                  @ileneken3

                  the difference between E73-2G4M04S and E73-2G4M04S1B is that the last one seems to be from a new batch. I got both, the only difference was that the last one I needed to recover and the other one (old) I only had to "burn bootloader".

                  your problem with the Arduino IDE seems to have something to do with the Sandeep installation, see the comment of @Toyman: https://forum.mysensors.org/topic/6961/nrf5-action/1749

                  1 Reply Last reply
                  0
                  • ileneken3I ileneken3

                    @neverdie
                    Unfortunately, nothing is that simple - at least for me. I have gone in circles with the J-LINK drivers. In order to use the Arduino IDE for programming, you must use the WinUSB driver installed by Zadig. But if you do that, the nRFgo Studio no longer recognizes any J-LINK device. So I re-install RFgo Studio, and then I can't use the Arduino IDE anymore!

                    But I can work around those issues, because everything programs and works right when programming the device on the NRF DK board. The problem is I can't do anything with the two external boards I tried. With one, I was able to unlock it with a "Recover" in nRFgo Studio, but the programming doesn't seem to cause the chip to do anything (nothing logged by the gateway). With the other, I can't unlock the board - it always says: "Recover failed: Unknown error".
                    Both boards are E73 - but one is marked as E73-2G4M04S and the other is E73-2G4M04S1B.

                    Any ideas?

                    NeverDieN Offline
                    NeverDieN Offline
                    NeverDie
                    Hero Member
                    wrote on last edited by NeverDie
                    #26

                    @ileneken3 What I meant was just export your .hex file and then drop it on the virtual JLINK drive to do the chip programming, not try to burn it directly from the IDE. That way you only depend on the DK doing it's job, not on an arduino IDE, where some versions don't seem to work well. Anyhow, that's how I do it now, and, at least for me, it seems to work the most reliably.

                    That said, I haven't tried the E73-2G4M04S1B, so can't really say regarding that one specifically. On the inside they should all be the same chip though, so I'm surprised to hear that it may have different requirements.

                    These days I'm largely focused on the nRF52840 and driving it with Forth. Maybe later I may circle back to the 832.

                    ileneken3I 1 Reply Last reply
                    0
                    • NeverDieN NeverDie

                      @ileneken3 What I meant was just export your .hex file and then drop it on the virtual JLINK drive to do the chip programming, not try to burn it directly from the IDE. That way you only depend on the DK doing it's job, not on an arduino IDE, where some versions don't seem to work well. Anyhow, that's how I do it now, and, at least for me, it seems to work the most reliably.

                      That said, I haven't tried the E73-2G4M04S1B, so can't really say regarding that one specifically. On the inside they should all be the same chip though, so I'm surprised to hear that it may have different requirements.

                      These days I'm largely focused on the nRF52840 and driving it with Forth. Maybe later I may circle back to the 832.

                      ileneken3I Offline
                      ileneken3I Offline
                      ileneken3
                      wrote on last edited by
                      #27

                      @neverdie

                      Yes, I understood what you meant. I will only do the "Export compiled Binary" from the IDE, and leave the drivers as J-Link commander or nrfGo Studio wants them.

                      In: https://www.openhardware.io/view/376/MySensors-NRF5-Platform it says:
                      "Currently, the nRF52832 and nRF51822 are supported so we recommend sticking with those for now."

                      I noticed that my board: (E73-2G4M04S) is labeled "NRF52810". So is that why after programming it nothing works (nothing seen on gateway) :( ?

                      If so, I messed up on that order.

                      But I am also trying the E73 2G4M04S1B, which at least from the AliExpress order
                      https://www.aliexpress.com/item/CDEBYTE-E73-2G4M04S-BLE-4-2-5-0-long-distance-100m-2-4GHz-SMD-ARM-Core/32820692238.html?spm=a2g0s.9042311.0.0.27424c4dSKBLn7

                      says it is nRF52832. (It isn't labeled on the board though). For this module, I can't unlock it using "Recover" from nRfgoStudio. It always fails with a message "Recover failed: Unknown error".

                      From the command line, if I do

                      nrfjprog.exe -f NRF52 --recover --log

                      and it comes back immediately with:

                      Recovering device. This operation might take 30s.
                      ERROR: Recover failed. Please make sure that the correct device family is given
                      ERROR: and try again.

                      The key error from the log seems to be:

                      2018-Dec-27 12:25:22 . . . . . nRF52_power_debug_and_system_regions
                      2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register
                      2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register: JLink: JLINK_CORESIGHT_WriteAPDPReg(DP reg 0x02, 0x00000000)
                      2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register: JLink: returns -1
                      2018-Dec-27 12:25:23 . . . . . . nRF52_write_debug_port_register: JLink: (0005ms, 0288ms total)
                      2018-Dec-27 12:25:23 . . . . . . nRF52_write_debug_port_register: JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.

                      2018-Dec-27 12:25:23 . . . . . nRF52_power_debug_and_system_regions: JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.

                      If I do: nrfjprog.exe -f NRF51 --recover --log

                      it actually makes LD5 on the DK board flash for 30 seconds, but still returns failure with the exact same message.

                      Any other tricks for "recover/unlock" of those boards?

                      Thanks!

                      NeverDieN O 2 Replies Last reply
                      0
                      • ileneken3I ileneken3

                        @neverdie

                        Yes, I understood what you meant. I will only do the "Export compiled Binary" from the IDE, and leave the drivers as J-Link commander or nrfGo Studio wants them.

                        In: https://www.openhardware.io/view/376/MySensors-NRF5-Platform it says:
                        "Currently, the nRF52832 and nRF51822 are supported so we recommend sticking with those for now."

                        I noticed that my board: (E73-2G4M04S) is labeled "NRF52810". So is that why after programming it nothing works (nothing seen on gateway) :( ?

                        If so, I messed up on that order.

                        But I am also trying the E73 2G4M04S1B, which at least from the AliExpress order
                        https://www.aliexpress.com/item/CDEBYTE-E73-2G4M04S-BLE-4-2-5-0-long-distance-100m-2-4GHz-SMD-ARM-Core/32820692238.html?spm=a2g0s.9042311.0.0.27424c4dSKBLn7

                        says it is nRF52832. (It isn't labeled on the board though). For this module, I can't unlock it using "Recover" from nRfgoStudio. It always fails with a message "Recover failed: Unknown error".

                        From the command line, if I do

                        nrfjprog.exe -f NRF52 --recover --log

                        and it comes back immediately with:

                        Recovering device. This operation might take 30s.
                        ERROR: Recover failed. Please make sure that the correct device family is given
                        ERROR: and try again.

                        The key error from the log seems to be:

                        2018-Dec-27 12:25:22 . . . . . nRF52_power_debug_and_system_regions
                        2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register
                        2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register: JLink: JLINK_CORESIGHT_WriteAPDPReg(DP reg 0x02, 0x00000000)
                        2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register: JLink: returns -1
                        2018-Dec-27 12:25:23 . . . . . . nRF52_write_debug_port_register: JLink: (0005ms, 0288ms total)
                        2018-Dec-27 12:25:23 . . . . . . nRF52_write_debug_port_register: JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.

                        2018-Dec-27 12:25:23 . . . . . nRF52_power_debug_and_system_regions: JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.

                        If I do: nrfjprog.exe -f NRF51 --recover --log

                        it actually makes LD5 on the DK board flash for 30 seconds, but still returns failure with the exact same message.

                        Any other tricks for "recover/unlock" of those boards?

                        Thanks!

                        NeverDieN Offline
                        NeverDieN Offline
                        NeverDie
                        Hero Member
                        wrote on last edited by NeverDie
                        #28

                        @ileneken3 I suggest posting a query on the nordic devzone forum. A Nordic engineer will get assigned to it and give you an answer. I've tried this a few times, and I had good luck with it. Generally 24 hour turnaround on weekdays, and no answers on weekends. So, if you post it now, you may get an answer tomorrow. It's in Nordic's interest to help developers unlock these chips, and if there are any secrets to doing so, Nordic will certainly know them.

                        It sounds as though once you get past the unlock issue, it will be easier for you.

                        1 Reply Last reply
                        0
                        • ileneken3I ileneken3

                          @neverdie

                          Yes, I understood what you meant. I will only do the "Export compiled Binary" from the IDE, and leave the drivers as J-Link commander or nrfGo Studio wants them.

                          In: https://www.openhardware.io/view/376/MySensors-NRF5-Platform it says:
                          "Currently, the nRF52832 and nRF51822 are supported so we recommend sticking with those for now."

                          I noticed that my board: (E73-2G4M04S) is labeled "NRF52810". So is that why after programming it nothing works (nothing seen on gateway) :( ?

                          If so, I messed up on that order.

                          But I am also trying the E73 2G4M04S1B, which at least from the AliExpress order
                          https://www.aliexpress.com/item/CDEBYTE-E73-2G4M04S-BLE-4-2-5-0-long-distance-100m-2-4GHz-SMD-ARM-Core/32820692238.html?spm=a2g0s.9042311.0.0.27424c4dSKBLn7

                          says it is nRF52832. (It isn't labeled on the board though). For this module, I can't unlock it using "Recover" from nRfgoStudio. It always fails with a message "Recover failed: Unknown error".

                          From the command line, if I do

                          nrfjprog.exe -f NRF52 --recover --log

                          and it comes back immediately with:

                          Recovering device. This operation might take 30s.
                          ERROR: Recover failed. Please make sure that the correct device family is given
                          ERROR: and try again.

                          The key error from the log seems to be:

                          2018-Dec-27 12:25:22 . . . . . nRF52_power_debug_and_system_regions
                          2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register
                          2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register: JLink: JLINK_CORESIGHT_WriteAPDPReg(DP reg 0x02, 0x00000000)
                          2018-Dec-27 12:25:22 . . . . . . nRF52_write_debug_port_register: JLink: returns -1
                          2018-Dec-27 12:25:23 . . . . . . nRF52_write_debug_port_register: JLink: (0005ms, 0288ms total)
                          2018-Dec-27 12:25:23 . . . . . . nRF52_write_debug_port_register: JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -1.

                          2018-Dec-27 12:25:23 . . . . . nRF52_power_debug_and_system_regions: JLinkARM.dll CORESIGHT_WriteAPDPReg returned error -102.

                          If I do: nrfjprog.exe -f NRF51 --recover --log

                          it actually makes LD5 on the DK board flash for 30 seconds, but still returns failure with the exact same message.

                          Any other tricks for "recover/unlock" of those boards?

                          Thanks!

                          O Offline
                          O Offline
                          Omemanti
                          wrote on last edited by Omemanti
                          #29

                          @ileneken3 sorry, can't help you anymore.

                          I can only tell that I installed the segger drivers, and everything as described by @d00616

                          Most issues I have, happen when I did some soldering wrong or when I've been messing around with drivers. A clean setup almost always solve my problems

                          I used both old and new ebyte modules and they work like a charm.0_1545943568844_IMG_20181227_213333.jpg
                          0_1545943598576_IMG_20181227_213249.jpg

                          1 Reply Last reply
                          1
                          • S Offline
                            S Offline
                            Sancho119
                            wrote on last edited by
                            #30

                            Hi,

                            I'm trying to begin with nrf52832.
                            I have follow advice, with soldering 4 wires. I use STlink v2, downloading soft before use it.
                            When i try to erase the nrf52832, with sketch "mass_erase" in exemple, i have the following error :

                            Arduino : 1.8.7 (Windows 10), Carte : "MyBoardNRF5 nRF52832, None, Crystal Oscillator, Don't enable"

                            C:\Users\Sancho\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/stlink-v2.cfg -c transport select hla_swd; set WORKAREASIZE 0x4000; -f target/nrf52.cfg -c init; halt; nrf51 mass_erase; program {{{build.core.path}/SDK/components/softdevice/none/hex/none_nrf52_{softdeviceversion}_softdevice.hex}} verify reset; shutdown;
                            Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
                            Licensed under GNU GPL v2
                            For bug reports, read
                            http://openocd.org/doc/doxygen/bugs.html
                            debug_level: 2
                            0x4000
                            Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
                            adapter speed: 10000 kHz
                            Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                            Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                            Info : clock speed 4000 kHz
                            Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
                            Info : using stlink api v2
                            Info : Target voltage: 3.280426
                            Error: init mode failed (unable to connect to the target)
                            in procedure 'init'
                            in procedure 'ocd_bouncer'

                            Erreur lors de la gravure de la séquence d'initialisation.

                            I try to upload an empty sketch (MyBoardNRF5), and have this message :

                            Arduino : 1.8.7 (Windows 10), Carte : "MyBoardNRF5 nRF52832, None, Crystal Oscillator, Don't enable"

                            Le croquis utilise 10508 octets (2%) de l'espace de stockage de programmes. Le maximum est de 524288 octets.
                            C:\Users\Sancho\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/stlink-v2.cfg -c transport select hla_swd; set WORKAREASIZE 0x4000; -f target/nrf52.cfg -c program {{C:\Users\Sancho\AppData\Local\Temp\arduino_build_74329/MyBoardNRF5.ino.hex}} verify reset; shutdown;
                            Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
                            Licensed under GNU GPL v2
                            For bug reports, read
                            http://openocd.org/doc/doxygen/bugs.html
                            debug_level: 2
                            0x4000
                            Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
                            adapter speed: 10000 kHz
                            Une erreur est survenue lors du transfert du croquis
                            Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                            Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                            Info : clock speed 4000 kHz
                            Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
                            Info : using stlink api v2
                            Info : Target voltage: 3.280426
                            Error: init mode failed (unable to connect to the target)
                            in procedure 'program'
                            in procedure 'init' called at file "embedded:startup.tcl", line 473
                            in procedure 'ocd_bouncer'
                            ** OpenOCD init failed **
                            shutdown command invoked

                            Can you help me please ?

                            monteM 1 Reply Last reply
                            0
                            • S Sancho119

                              Hi,

                              I'm trying to begin with nrf52832.
                              I have follow advice, with soldering 4 wires. I use STlink v2, downloading soft before use it.
                              When i try to erase the nrf52832, with sketch "mass_erase" in exemple, i have the following error :

                              Arduino : 1.8.7 (Windows 10), Carte : "MyBoardNRF5 nRF52832, None, Crystal Oscillator, Don't enable"

                              C:\Users\Sancho\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/stlink-v2.cfg -c transport select hla_swd; set WORKAREASIZE 0x4000; -f target/nrf52.cfg -c init; halt; nrf51 mass_erase; program {{{build.core.path}/SDK/components/softdevice/none/hex/none_nrf52_{softdeviceversion}_softdevice.hex}} verify reset; shutdown;
                              Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
                              Licensed under GNU GPL v2
                              For bug reports, read
                              http://openocd.org/doc/doxygen/bugs.html
                              debug_level: 2
                              0x4000
                              Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
                              adapter speed: 10000 kHz
                              Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                              Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                              Info : clock speed 4000 kHz
                              Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
                              Info : using stlink api v2
                              Info : Target voltage: 3.280426
                              Error: init mode failed (unable to connect to the target)
                              in procedure 'init'
                              in procedure 'ocd_bouncer'

                              Erreur lors de la gravure de la séquence d'initialisation.

                              I try to upload an empty sketch (MyBoardNRF5), and have this message :

                              Arduino : 1.8.7 (Windows 10), Carte : "MyBoardNRF5 nRF52832, None, Crystal Oscillator, Don't enable"

                              Le croquis utilise 10508 octets (2%) de l'espace de stockage de programmes. Le maximum est de 524288 octets.
                              C:\Users\Sancho\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/stlink-v2.cfg -c transport select hla_swd; set WORKAREASIZE 0x4000; -f target/nrf52.cfg -c program {{C:\Users\Sancho\AppData\Local\Temp\arduino_build_74329/MyBoardNRF5.ino.hex}} verify reset; shutdown;
                              Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
                              Licensed under GNU GPL v2
                              For bug reports, read
                              http://openocd.org/doc/doxygen/bugs.html
                              debug_level: 2
                              0x4000
                              Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
                              adapter speed: 10000 kHz
                              Une erreur est survenue lors du transfert du croquis
                              Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                              Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                              Info : clock speed 4000 kHz
                              Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
                              Info : using stlink api v2
                              Info : Target voltage: 3.280426
                              Error: init mode failed (unable to connect to the target)
                              in procedure 'program'
                              in procedure 'init' called at file "embedded:startup.tcl", line 473
                              in procedure 'ocd_bouncer'
                              ** OpenOCD init failed **
                              shutdown command invoked

                              Can you help me please ?

                              monteM Offline
                              monteM Offline
                              monte
                              wrote on last edited by monte
                              #31

                              @sancho119 what exact model of a board do you have? Did you try to switch SWDIO and SWCLK, maybe they are messed up? Or lose connection? To erase softdevice you can simply chose Tools>Softdevice>"None" and then press "Burn bootloader" button.

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                Sancho119
                                wrote on last edited by
                                #32

                                Hello
                                it's a E73 2G4M04S1B from EBYTE
                                When i switch SWDIO and SWCLK, i can see the led of STLink V2 changing from red to blue, but when i try to uplod empty sketch (MyBoardNRF5), i have this error :

                                C:\Users\Sancho\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/stlink-v2.cfg -c transport select hla_swd; set WORKAREASIZE 0x4000; -f target/nrf52.cfg -c program {{C:\Users\Sancho\AppData\Local\Temp\arduino_build_432557/MyBoardNRF5.ino.hex}} verify reset; shutdown;
                                Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
                                Licensed under GNU GPL v2
                                For bug reports, read
                                http://openocd.org/doc/doxygen/bugs.html
                                debug_level: 2
                                0x4000
                                Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
                                adapter speed: 10000 kHz
                                Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                                Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                                Info : clock speed 4000 kHz
                                Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
                                Info : using stlink api v2
                                Info : Target voltage: 3.283200
                                Info : nrf52.cpu: hardware has 0 breakpoints, 2 watchpoints
                                Error: timed out while waiting for target halted
                                TARGET: nrf52.cpu - Not halted
                                in procedure 'program'
                                in procedure 'reset' called at file "embedded:startup.tcl", line 478
                                in procedure 'ocd_bouncer'

                                embedded:startup.tcl:454: Error: ** Unable to reset target **
                                in procedure 'program'
                                in procedure 'program_error' called at file "embedded:startup.tcl", line 479
                                at file "embedded:startup.tcl", line 454
                                le port série sélectionné at file "embedded:startup.tcl", line 454
                                n'existe pas ou votre Arduino n'est pas connectée

                                N 1 Reply Last reply
                                0
                                • S Sancho119

                                  Hello
                                  it's a E73 2G4M04S1B from EBYTE
                                  When i switch SWDIO and SWCLK, i can see the led of STLink V2 changing from red to blue, but when i try to uplod empty sketch (MyBoardNRF5), i have this error :

                                  C:\Users\Sancho\AppData\Local\Arduino15\packages\sandeepmistry\tools\openocd\0.10.0-dev.nrf5/bin/openocd.exe -d2 -f interface/stlink-v2.cfg -c transport select hla_swd; set WORKAREASIZE 0x4000; -f target/nrf52.cfg -c program {{C:\Users\Sancho\AppData\Local\Temp\arduino_build_432557/MyBoardNRF5.ino.hex}} verify reset; shutdown;
                                  Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-10-10:13)
                                  Licensed under GNU GPL v2
                                  For bug reports, read
                                  http://openocd.org/doc/doxygen/bugs.html
                                  debug_level: 2
                                  0x4000
                                  Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
                                  adapter speed: 10000 kHz
                                  Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                                  Info : Unable to match requested speed 10000 kHz, using 4000 kHz
                                  Info : clock speed 4000 kHz
                                  Info : STLINK v2 JTAG v29 API v2 SWIM v7 VID 0x0483 PID 0x3748
                                  Info : using stlink api v2
                                  Info : Target voltage: 3.283200
                                  Info : nrf52.cpu: hardware has 0 breakpoints, 2 watchpoints
                                  Error: timed out while waiting for target halted
                                  TARGET: nrf52.cpu - Not halted
                                  in procedure 'program'
                                  in procedure 'reset' called at file "embedded:startup.tcl", line 478
                                  in procedure 'ocd_bouncer'

                                  embedded:startup.tcl:454: Error: ** Unable to reset target **
                                  in procedure 'program'
                                  in procedure 'program_error' called at file "embedded:startup.tcl", line 479
                                  at file "embedded:startup.tcl", line 454
                                  le port série sélectionné at file "embedded:startup.tcl", line 454
                                  n'existe pas ou votre Arduino n'est pas connectée

                                  N Offline
                                  N Offline
                                  ncollins
                                  wrote on last edited by
                                  #33

                                  @sancho119 No matter what I tried, I could not unlock the E73 with the STLink.

                                  I had to buy a jlink clone, download a bunch of segger debugging tools, use the segger tools to override the lock flag. After that I could flash the bootloader.

                                  https://github.com/micooke/arduino-nRF5-smartwatches/blob/master/nrf52_disable_read_protection.txt

                                  #To share my experience with the nRF52832.
                                  #I was unable to disable the read protection / flash lock with a BMP or ST-Link V2, but i was successful with a J-Link.
                                  
                                  #When nRF52832 chip is read protected / locked, the first step is to try:
                                  nrfjprog –recover -f nrf52
                                  
                                  #This performs the same task as:
                                  Jlink -if swd -device nrf52
                                  J-Link>SWDSelect
                                  J-Link>SWDWriteDP 1, 0x50000000
                                  J-Link>SWDWriteDP 2, 0x01000000
                                  J-Link>SWDWriteAP 1, 0x00000001
                                  
                                  #Wait until AP 2 is 0, and the operation is complete
                                  J-Link>SWDReadAP 2
                                  
                                  #If two successive reads from AP 3 produce 0, then 1 then protection is disabled
                                  J-Link>SWDReadAP 3
                                  J-Link>SWDReadAP 3
                                  
                                  #Tested with JLink v6.20b
                                  
                                  monteM 1 Reply Last reply
                                  0
                                  • N ncollins

                                    @sancho119 No matter what I tried, I could not unlock the E73 with the STLink.

                                    I had to buy a jlink clone, download a bunch of segger debugging tools, use the segger tools to override the lock flag. After that I could flash the bootloader.

                                    https://github.com/micooke/arduino-nRF5-smartwatches/blob/master/nrf52_disable_read_protection.txt

                                    #To share my experience with the nRF52832.
                                    #I was unable to disable the read protection / flash lock with a BMP or ST-Link V2, but i was successful with a J-Link.
                                    
                                    #When nRF52832 chip is read protected / locked, the first step is to try:
                                    nrfjprog –recover -f nrf52
                                    
                                    #This performs the same task as:
                                    Jlink -if swd -device nrf52
                                    J-Link>SWDSelect
                                    J-Link>SWDWriteDP 1, 0x50000000
                                    J-Link>SWDWriteDP 2, 0x01000000
                                    J-Link>SWDWriteAP 1, 0x00000001
                                    
                                    #Wait until AP 2 is 0, and the operation is complete
                                    J-Link>SWDReadAP 2
                                    
                                    #If two successive reads from AP 3 produce 0, then 1 then protection is disabled
                                    J-Link>SWDReadAP 3
                                    J-Link>SWDReadAP 3
                                    
                                    #Tested with JLink v6.20b
                                    
                                    monteM Offline
                                    monteM Offline
                                    monte
                                    wrote on last edited by
                                    #34

                                    @ncollins have you tried this: https://github.com/AndruPol/nrf52832-recover ?

                                    1 Reply Last reply
                                    0
                                    • N Offline
                                      N Offline
                                      ncollins
                                      wrote on last edited by
                                      #35

                                      At the time, I did not have a BMP or any STM32 capable of being flashed as a programmer.

                                      I figured the jlink clone might be useful in the future, but I definitely think the BMP / diy programmer is the way I would have gone if I had one sitting around.

                                      1 Reply Last reply
                                      0
                                      • S Offline
                                        S Offline
                                        Sancho119
                                        wrote on last edited by
                                        #36

                                        @ncollins
                                        @monte
                                        thx for these advices.
                                        I think i will try with BMP clone (STM32F103C8T6), cheaper than J-link (i must only wait 1 month to have it, buying it in china...)
                                        is it possible to erase E73 with BMP in win10 ?

                                        1 Reply Last reply
                                        0
                                        • berkseoB Offline
                                          berkseoB Offline
                                          berkseo
                                          wrote on last edited by berkseo
                                          #37

                                          https://translate.google.ru/translate?sl=auto&tl=en&u=http%3A%2F%2Fmysensors.ru%2Fforum%2Fviewtopic.php%3Ff%3D5%26t%3D456

                                          https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRFgo-Studio/Download#infotabs

                                          1 Reply Last reply
                                          1
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          13

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.0k

                                          Posts


                                          Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular