atc1441 / ESP32_nRF52_SWD

This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32
GNU General Public License v3.0
229 stars 41 forks source link

Flashing bootloader #22

Open bbuster2 opened 1 year ago

bbuster2 commented 1 year ago

I am trying to flash the bootloader on a brand new chip (Ebyte E73 nRF52840). Checkin if the chip is locked gives me the following result: Ok: the nRF is unlocked

I downloaded a few bootloaders including the SEEED USB bootloader: Seeed_XIAO_nRF52840_Sense_bootloader-0.6.1_s140_7.3.0.hex

I can flash the chip and i see after a few moments the chip is written

.... 14:55:22.959 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:22.992 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:22.992 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.025 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.025 -> 000 Write Register: 0x4001e504 : 0x00000001 14:55:23.025 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.057 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.057 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.090 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.090 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.121 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.121 -> 0000 Read Register: 0x4001e400 : 0x00000000 14:55:23.121 -> Done flashing file, it took 19015ms speed: 28.0205kbs

Is this the correct result? I used the SEEED bootloader because i try to flash my own software via Arduino to the nRF52840. I connected a usb cable to the VBUS (5v), GND, D+ and D- (including resistors and capacitor)

Left part on this image: https://camo.githubusercontent.com/f6eeaf4a553951599a5c2197d05be781ac764dd330e77d7f09aeae72b76785dd/68747470733a2f2f6465767a6f6e652e6e6f7264696373656d692e636f6d2f726573697a65642d696d6167652f5f5f73697a652f373032783437362f5f5f6b65792f737570706f72742d6174746163686d656e74732f62656566356431623737363434633434386461626666333136363866336134372d32643162336461623134623834646561613262313637646539626261363762612f5343482e504e47

When i connect the USB cable, nothing shows up, not in Arduino IDE and not in finder (i'm using mac). Is my way of doing this correct or did i do something wrong?

danielkucera commented 1 year ago

It expects to get .bin file, not .hex. There is a WiP PR for hex file support #15

bbuster2 commented 1 year ago

Well, i tried the hex file first but then converted it to .bin via HxD but this was the result from the bin upload

danielkucera commented 1 year ago

Did you erase it after each flash?

bbuster2 commented 1 year ago

Yes, i just tried it again, connect the ESP32, erased the chip and flashed the bootloader file (hex file converted to bin file).

Is the output i showed above correct?

Edit: Erase if AFTER each flash? I assumed you meant before but do i need to erase it after the flash??

bbuster2 commented 1 year ago

Update,

I tried to install arduino_nano_33_ble_bootloader-0.7.0_s140_6.1.1.bin When i flashed it via the ESP32, the arduino IDE showed except my ESP32 port, also a new port: /dev/cu.usbmodemF2BD185AD80C1

When i unplug the ESP32, the port goes away. If i keep the ESP32 plugged in and try to upload a new arduino program to the new port, it cannot upload

Sketch uses 138160 bytes (16%) of program storage space. Maximum is 815104 bytes. Global variables use 13836 bytes (5%) of dynamic memory, leaving 223732 bytes for local variables. Maximum is 237568 bytes. Performing 1200-bps touch reset on serial port /dev/cu.usbmodemF2BD185AD80C1 Waiting for upload port... No upload port found, using address:"/dev/cu.usbmodemF2BD185AD80C1" label:"/dev/cu.usbmodemF2BD185AD80C1" protocol:"serial" protocol_label:"Serial Port (USB)" properties:{key:"pid" value:"0x521F"} properties:{key:"serialNumber" value:"F2BD185AD80C"} properties:{key:"vid" value:"0x1915"} as fallback`

Files are downloaded from here https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases/tag/0.7.0 The zip files include a .bin file

bbuster2 commented 1 year ago

It looks like flashing is not doing anything. After i flashed the file and read the nrf register, all the values are (tested with value 0, 300 and 10000):

Ok: Register read address: 0x00000000 value: 0x00000000
Ok: Register read address: 0x00000300 value: 0x00000000
Ok: Register read address: 0x00010000 value: 0x00000000
...
bbuster2 commented 1 year ago

After some more tests i see different bootloader files get different values than 0x0000000 But i still cannot upload my own code to the usb device, also when unplugging the ESP32, the usbmodem device goes away as well

danielkucera commented 1 year ago

update to latest master (a2d9a3d) and try that hex file again

bbuster2 commented 1 year ago

I already did (yesterday), but maybe i took the wrong bootloader file. I just have to upload this file Seeed_XIAO_nRF52840_Sense_bootloader-0.6.1_s140_7.3.0.hex And then use the same filename and click "Flash file"? That's it, after that i can reset the nRF and it should work?

I am not using a mosfet for ground, just connected the ESP32 ground to the nRF ground. Is that okay?

danielkucera commented 1 year ago

What does the serial log say?

bbuster2 commented 1 year ago

From Arduino IDE -> Serial monitor while "flashing" the firmware?

danielkucera commented 1 year ago

the same way you got this:

....
14:55:22.959 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:22.992 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:22.992 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.025 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.025 -> 000 Write Register: 0x4001e504 : 0x00000001
14:55:23.025 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.057 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.057 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.090 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.090 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.121 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.121 -> 0000 Read Register: 0x4001e400 : 0x00000000
14:55:23.121 -> Done flashing file, it took 19015ms speed: 28.0205kbs
bbuster2 commented 1 year ago
13:27:37.024 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.057 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.057 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.057 -> 000 Write Register: 0x4001e504 : 0x00000001
13:27:37.089 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.089 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.121 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.121 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.154 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.154 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.188 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.188 -> 000 Write Register: 0x4001e504 : 0x00000001
13:27:37.219 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.219 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.251 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.251 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.285 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.285 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.317 -> 0000 Read Register: 0x4001e400 : 0x00000000
13:27:37.317 -> Done flashing file, it took 16648ms speed: 32.0044kbs

You need all? Because i cannot copy everything the Serial monitor outputs so if you need all i need to use a different way to copy the result

bbuster2 commented 1 year ago

Does this give any information?

danielkucera commented 1 year ago

No, you need to see something like: hex line found:. But I just noticed it only works with Flash uploaded file: image

bbuster2 commented 1 year ago

Thank you for your reply.

I don't get it working so here are my steps / results:

First i turn on the ESP32 with the nRF52840 connected.

My connection is: SWC -> IO21 SWD -> IO19 GND -> GND (No mosfet)

  1. Open swd.local

  2. Click Init SWD -> Ok: Init of SWD ID: 0x2ba01477

  3. Erase nRF -> Ok: Everything erased

    0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000

  4. Flash Uploaded File -> Select file (Seeed_XIAO_nRF52840_Sense_bootloader-0.6.1_s140_7.3.0), offset = 0

  5. Flash uploaded File

received data file:Seeed_XIAO_nRF52840_Sense_bootloader-0.6.1_s140_7.3.0.hex index:0 len:1116 final:0 hex line found: :04000003F000AE1942 hex line found: :020000040000FA Setting flash_offset to 0 hex line found: :1000000000040020810A000015070000610A0000BA Writing flash_offset: 0x0 off 0x0 000 Write Register: 0x4001e504 : 0x00000001 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 hex line found: :100010001F07000029070000330700000000000050 Writing flash_offset: 0x0 off 0x10 000 Write Register: 0x4001e504 : 0x00000001 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 hex line found: :10002000000000000000000000000000A50A000021 ..

Now i have a different problem, after half a minute the ESP32 crashes and gives me this error, while i am almost certain that it completed the flash before. It does it now on multiple .hex files, even after reuploading the firmware to the ESP32

hex line found: :10056000704770B50C4605464FF4806608E0284693 Writing flash_offset: 0x0 off 0x560 000 Write Register: 0x4001e504 : 0x00000001 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 0000 Read Register: 0x4001e400 : 0x00000000 E (97281) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time: E (97281) task_wdt: - async_tcp (CPU 1) E (97281) task_wdt: Tasks currently running: E (97281) task_wdt: CPU 0: IDLE0 E (97281) task_wdt: CPU 1: loopTask E (97281) task_wdt: Aborting. abort() was called at PC 0x40159604 on core 0 ELF file SHA256: 0000000000000000 Backtrace: 0x4008cbec:0x3ffbf850 0x4008ce65:0x3ffbf870 0x40159604:0x3ffbf890 0x40089655:0x3ffbf8b0 0x40172327:0x3ffbc220 0x4015afab:0x3ffbc240 0x4008f615:0x3ffbc260 0x4008de6a:0x3ffbc280 Rebooting...

bbuster2 commented 1 year ago

Update:

I got a bit further. After selecting another Arduino bootloader file (pca10056_bootloader-0.3.0_s140_6.1.1.hex), a new USB device got detected (NRF52BOOT).

I could now upload an example sketch via Arduino IDE and i got this:

Opened serial port /dev/cu.usbmodem1301
Starting DFU upgrade of type 4, SoftDevice size: 0, bootloader size: 0, application size: 113640
Sending DFU start packet
Sending DFU init packet
Sending firmware file
########################################
########################################
########################################
########################################
########################################
######################
Activating new firmware

DFU upgrade took 7.148498058319092s
Device programmed.

After that, nothing happens (except Mac says the USB device is disconnected). After double resetting the device, the NRF52BOOT shows up again and i see these 3 files:

But the serial monitor doesn't show any data, and the nrf beacon app (for ios) says the beacon is not found. What am i doing wrong? And just powering the nrf up isn't enough to make it start the normal way? I need to double reset it to get the NRF52BOOT usb device come up

Update: I got it working for a few times, 2 times resetting showed me the USB folder, 1 time rebooting let me see the Serial Monitor output.

Now it won't work anymore. After 2 times resetting i get the NRF52BOOT but it automatically unmounts after 1 second on my Mac. One time resetting doesn't do anything anymore (can't upload any code)