# OpenSK logo ## Nordic nRF52840-DK board ![Nordic development kit](../img/devkit_annotated.jpg) ### Flashing using JTAG The development board comes with its own JTAG port, so the default programmer is the easiest and most convenient. You can flash OpenSK with these steps: 1. Connect a micro USB cable to the JTAG USB port. 1. Run our script for compiling/flashing Tock OS and OpenSK on your device: ```shell ./deploy.py --board=nrf52840dk_opensk --opensk ``` 1. Connect a micro USB cable to the device USB port. **Note**: Due to current limitations of our implementation and Tock, you may have to press the `BOOT/RESET` button, located next to the device USB port on the board in order to see your OpenSK device on your system. ### Buttons and LEDs Out of the 5 buttons, the group of 4 behaves identically. They all convey user presence to the application. Some actions like register and login will make the board blink, asking you to confirm the transaction with a button press. The remaining fifth button restarts the board. The group of 4 LEDs on the right show the state of the app. There are different patterns: | Pattern | Cause | |------------------------------------|------------------------| | LED1 slow blink | kernel panic | | all LEDs blinking together | app panic | | LED1+4 and LED2+3 fast alternating | asking for touch | | fast swirling | wink (just saying Hi!) | | circle | allocator panic | The LEDs closer to the JTAG port indicates the power and debugging state. There are 3 switches that need to be in the correct position: * Power (bottom left): On * nRF power source (center left): VDD * SW6 (top right): DEFAULT ### Upgradability There are variants of the board that introduce A/B partitions for upgrading the firmware. You can bootstrap an upgradable board using one of the two commands: ```shell ./deploy.py --board=nrf52840dk_opensk_a --opensk --version=0 ./deploy.py --board=nrf52840dk_opensk_b --opensk --version=0 ``` Afterwards, you can upgrade the other partition with ```shell # Board A -> B ./deploy.py --board=nrf52840dk_opensk_b --opensk --programmer=none --version=1 py_virtual_env/bin/python3 -m tools.deploy_partition --board=nrf52840dk_opensk_b --version=1 # Board B -> A ./deploy.py --board=nrf52840dk_opensk_a --opensk --programmer=none --version=1 py_virtual_env/bin/python3 -m tools.deploy_partition --board=nrf52840dk_opensk_a --version=1 ``` respectively. You can only upgrade the partition that is not currently running, otherwise your deploy attempts will fail. You can call `deploy_partition` after you locked down your device, to deploy changes to your development board. Upgrades only apply after a reboot. If you want to use Vendor HID, add the `--vendor-hid` flag to all calls, for example: ```shell ./deploy.py --board=nrf52840dk_opensk_a --opensk --version=0 --vendor-hid ./deploy.py --board=nrf52840dk_opensk_b --opensk --programmer=none --version=1 --vendor-hid py_virtual_env/bin/python3 -m tools.deploy_partition --board=nrf52840dk_opensk_b --version=1 --vendor-hid ```