Compare commits
3 Commits
3a76aa6ef6
...
6c485c9ead
| Author | SHA1 | Date | |
|---|---|---|---|
| 6c485c9ead | |||
| 3020f98684 | |||
| 58f2f56c35 |
57
README.md
57
README.md
@ -68,60 +68,3 @@ softdevice has to flashed to the chip.
|
|||||||
[nrf-recover](https://docs.rs/crate/nrf-recover/latest) utility
|
[nrf-recover](https://docs.rs/crate/nrf-recover/latest) utility
|
||||||
- [Pinning to use nRF52DK as programmer](https://devzone.nordicsemi.com/f/nordic-q-a/14058/external-programming-using-nrf52-dk)
|
- [Pinning to use nRF52DK as programmer](https://devzone.nordicsemi.com/f/nordic-q-a/14058/external-programming-using-nrf52-dk)
|
||||||
- For examples of how to use embassy to program nRF chips, see https://github.com/embassy-rs/embassy/tree/main/examples (and look for nrfXXX)
|
- For examples of how to use embassy to program nRF chips, see https://github.com/embassy-rs/embassy/tree/main/examples (and look for nrfXXX)
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Core locking up
|
|
||||||
|
|
||||||
One possible cause for the core to lock up is to have a flash memory
|
|
||||||
configuration that doesn't match the selected softdevice.
|
|
||||||
|
|
||||||
#### Background
|
|
||||||
|
|
||||||
When the device powers up, it looks for certain things at certain positions
|
|
||||||
in memory, namely the interrupt vector table and the program entrypoint.
|
|
||||||
The interrupt vector table and entrypoint it finds are from the softdevice.
|
|
||||||
After initialization, the softdevice then attempts to hand over control to the
|
|
||||||
user program. The user program again has an interrupt vector table and an
|
|
||||||
entrypoint that are expected to be at a certain position in memory.
|
|
||||||
Specifically, they are expected to be right after the softdevice. If they are
|
|
||||||
not there, the device enters a hard fault state and locks up the core.
|
|
||||||
|
|
||||||
This means that the flash memory configuration in `memory.x` has to be correct
|
|
||||||
for the program to start up properly:
|
|
||||||
|
|
||||||
```
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
FLASH : ORIGIN = 0x00000000 + <softdevice size>, LENGTH = <flash memory size> - <softdevice size>
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The softdevice size can be found in the release notes of the softdevice. This
|
|
||||||
is a pdf that is downloaded along with the hex file from the nordic website.
|
|
||||||
The flash memory size depends on the model of microcontroller used.
|
|
||||||
|
|
||||||
#### Solution
|
|
||||||
|
|
||||||
1. Make sure `memory.x` is configured correctly for the selected softdevice. E.g., for `S112` running on an `nRF52832` chip:
|
|
||||||
```
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
FLASH : ORIGIN = 0x00000000 + 100K, LENGTH = 512K - 100K
|
|
||||||
RAM : ORIGIN = 0x20000000 + 30K, LENGTH = 64K - 30K
|
|
||||||
}
|
|
||||||
```
|
|
||||||
2. Recover the device from it's locked state. This erases the flash memory:
|
|
||||||
```
|
|
||||||
$ probe-rs erase --chip nRF52832_xxAA --allow-erase-all
|
|
||||||
```
|
|
||||||
4. Compile and flash the program:
|
|
||||||
```
|
|
||||||
$ cargo run --bin blinky --release
|
|
||||||
```
|
|
||||||
The program will not run successfully at this time, as it requires the softdevice to be flashed as well.
|
|
||||||
2. Flash the desired softdevice, e.g., `S112`:
|
|
||||||
```
|
|
||||||
$ probe-rs download --verify --binary-format hex --chip nRF52832_xxAA s112_nrf52_7.3.0_softdevice.hex
|
|
||||||
```
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user