Difference between revisions of "NRF52840 Development"
(→Setup) |
(→Resources) |
||
Line 244: | Line 244: | ||
====Resources==== | ====Resources==== | ||
− | [http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v14.2.0%2Fiot_ug_border_router.html&resultof=%22link-local%22%20%22ipv6%22%20 Distributing a global IPv6 prefix]<br / | + | [http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v14.2.0%2Fiot_ug_border_router.html&resultof=%22link-local%22%20%22ipv6%22%20 Distributing a global IPv6 prefix]<br /> |
− | |||
− | |||
[https://visualgdb.com/tutorials/arm/nrf51/6lowpan/ Connecting the Nordic nRF52 chip to IPv6 networks via 6LoWPAN ]<br /> | [https://visualgdb.com/tutorials/arm/nrf51/6lowpan/ Connecting the Nordic nRF52 chip to IPv6 networks via 6LoWPAN ]<br /> | ||
[https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.2.0/iot_sdk_user_guides_linux_commands.html#iot_sdk_user_guides_linux_commands_init Prepare the Linux router device by initializing the 6LoWPAN module.]<br /> | [https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.2.0/iot_sdk_user_guides_linux_commands.html#iot_sdk_user_guides_linux_commands_init Prepare the Linux router device by initializing the 6LoWPAN module.]<br /> |
Revision as of 08:59, 3 February 2018
Contents
To compile, flash and reset
~/Projects/nRF5_SDK_14.2.0_17b948a/examples/peripheral/spi/pca10056/blank/armgcc
$ make $ nrfjprog -f NRF52 --program _build/nrf52840_xxaa.hex --sectorerase $ nrfjprog -f NRF52 --reset
Using Segger's Linux command line tools
Open three terminals in the /opt/SEGGER/JLink_V622g directory.
JLink Debugger
1. start JLinkExe then issue the following commands:
connect NRF52840_XXAA S <Enter>
$ ./JLinkExe SEGGER J-Link Commander V6.22g (Compiled Jan 17 2018 16:40:37) DLL version V6.22g, compiled Jan 17 2018 16:40:32 Connecting to J-Link via USB...O.K. Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jan 12 2018 16:05:20 Hardware version: V1.00 S/N: 683525645 VTref = 3.300V Type "connect" to establish a target connection, '?' for help J-Link>connect Please specify device / core. <Default>: NRF52832_XXAA Type '?' for selection dialog Device>NRF52840_XXAA Please specify target interface: J) JTAG (Default) S) SWD TIF>S Specify target interface speed [kHz]. <Default>: 4000 kHz Speed> Device "NRF52840_XXAA" selected. Connecting to target via SWD Found SW-DP with ID 0x2BA01477 Found SW-DP with ID 0x2BA01477 Scanning AP map to find all available APs AP[2]: Stopped AP scan as end of AP map has been reached AP[0]: AHB-AP (IDR: 0x24770011) AP[1]: JTAG-AP (IDR: 0x02880000) Iterating through AP map to find AHB-AP to use AP[0]: Core found AP[0]: AHB-AP ROM base: 0xE00FF000 CPUID register: 0x410FC241. Implementer code: 0x41 (ARM) Found Cortex-M4 r0p1, Little endian. FPUnit: 6 code (BP) slots and 2 literal slots CoreSight components: ROMTbl[0] @ E00FF000 ROMTbl[0][0]: E000E000, CID: B105E00D, PID: 000BB00C SCS-M7 ROMTbl[0][1]: E0001000, CID: B105E00D, PID: 003BB002 DWT ROMTbl[0][2]: E0002000, CID: B105E00D, PID: 002BB003 FPB ROMTbl[0][3]: E0000000, CID: B105E00D, PID: 003BB001 ITM ROMTbl[0][4]: E0040000, CID: B105900D, PID: 000BB9A1 TPIU ROMTbl[0][5]: E0041000, CID: B105900D, PID: 000BB925 ETM Cortex-M4 identified. J-Link>
Useful commands:
h halt g go (start running) r reset
Real Time Terminal Client
2. start RTT client
$ ./JLinkRTTClient ###RTT Client: ************************************************************ ###RTT Client: * SEGGER MICROCONTROLLER GmbH & Co KG * ###RTT Client: * Solutions for real time microcontroller applications * ###RTT Client: ************************************************************ ###RTT Client: * * ###RTT Client: * (c) 2012 - 2016 SEGGER Microcontroller GmbH & Co KG * ###RTT Client: * * ###RTT Client: * www.segger.com Support: support@segger.com * ###RTT Client: * * ###RTT Client: ************************************************************ ###RTT Client: * * ###RTT Client: * SEGGER J-Link RTT Client Compiled Jan 17 2018 16:40:49 * ###RTT Client: * * ###RTT Client: ************************************************************ ###RTT Client: ----------------------------------------------- ###RTT Client: Connecting to J-Link RTT Server via localhost:19021 Connected. ###RTT Client: Connection lost. Going to reconnect. ###RTT Client: Connecting to J-Link RTT Server via localhost:19021 .............. Connected. SEGGER J-Link V6.22g - Real time terminal output J-Link OB-SAM3U128-V2-NordicSemi compiled Jan 12 2018 16:05:20 V1.0, SN=683525645 Process: JLinkRemoteServer
output from printf commands will be sent here:
SPI Initialized. reset_AD7124. Reset failed: 0x00
Remote Server
To debug on the local machine, remote server does not seem to be necessary but here is how to start it:
start remote server
$ ./JLinkRemoteServer SEGGER J-Link Remote Server V6.22g Compiled Jan 17 2018 16:40:43 'q' to quit '?' for help Connected to J-Link with S/N 683525645 Waiting for client connection...
This example uses tunneling to connect to the Segger website so you can remotely access the test device if it is behind a firewall.
$ ./JLinkRemoteServer UseTunnel SEGGER J-Link Remote Server V6.22g Compiled Jan 17 2018 16:40:43 'q' to quit '?' for help Connected to J-Link with S/N 683525645 Resolving host name (jlink.segger.com)... O.K. Tunnel server IP: 185.162.249.2 Connecting to tunnel server... O.K. Waiting for client connection...
Resources
Debugging Nordic nRF51822 using SEGGER Real Time Terminal (RTT)
Set up the Pi as a Bluetooth-to-Ethernet router
Setup
Install the Router Advertisement Daemon on the Pi to distribute a global IPv6 prefix to the connected devices:
# apt-get install radvd
Create the file /etc/radvd.conf containing
# vi /etc/radvd.conf interface bt0 { AdvSendAdvert on; prefix 2001:db8::/64 { AdvOnLink off; AdvAutonomous on; AdvRouterAddr on; }; };
Set IPv6 forwarding (must be present).
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Run radvd daemon.
# service radvd restart
Check that the radvd daemon is running
# ps -ef |grep radvd root 20328 1 0 11:35 ? 00:00:00 /usr/sbin/radvd --logmethod stderr_clean root 20329 20328 0 11:35 ? 00:00:00 /usr/sbin/radvd --logmethod stderr_clean root 20333 6708 0 11:36 pts/0 00:00:00 grep radvd
Observe if new IPv6 prefix is disseminating over bt0 interface. HOW?
Load the bluetooth_6lowpan module
# modprobe bluetooth_6lowpan
Check that it is loaded
# lsmod|grep blue bluetooth_6lowpan 11549 0 6lowpan 18741 8 nhc_udp,nhc_routing,nhc_mobility,bluetooth_6lowpan,nhc_fragment,nhc_dest,nhc_hop,nhc_ipv6 bluetooth 365780 30 bluetooth_6lowpan,hci_uart,bnep,btbcm,rfcomm rfkill 20851 6 bluetooth,cfg80211
# echo 1 > /sys/kernel/debug/bluetooth/6lowpan_enable
# hciconfig hci0: Type: Primary Bus: UART BD Address: B8:27:EB:62:9E:24 ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING RX bytes:843 acl:0 sco:0 events:60 errors:0 TX bytes:4254 acl:0 sco:0 commands:60 errors:0
# hciconfig hci0 lestates Supported link layer states: YES Non-connectable Advertising State YES Scannable Advertising State YES Connectable Advertising State YES Directed Advertising State YES Passive Scanning State YES Active Scanning State YES Initiating State/Connection State in Master Role YES Connection State in the Slave Role YES Non-connectable Advertising State and Passive Scanning State combination YES Scannable Advertising State and Passive Scanning State combination YES Connectable Advertising State and Passive Scanning State combination YES Directed Advertising State and Passive Scanning State combination YES Non-connectable Advertising State and Active Scanning State combination YES Scannable Advertising State and Active Scanning State combination YES Connectable Advertising State and Active Scanning State combination YES Directed Advertising State and Active Scanning State combination YES Non-connectable Advertising State and Initiating State combination YES Scannable Advertising State and Initiating State combination YES Non-connectable Advertising State and Master Role combination YES Scannable Advertising State and Master Role combination YES Non-connectable Advertising State and Slave Role combination YES Scannable Advertising State and Slave Role combination YES Passive Scanning State and Initiating State combination YES Active Scanning State and Initiating State combination YES Passive Scanning State and Master Role combination YES Active Scanning State and Master Role combination YES Passive Scanning State and Slave Role combination YES Active Scanning State and Slave Role combination YES Initiating State and Master Role combination/Master Role and Master Role combination
# hcitool lescan LE Scan ... 00:91:4C:20:FC:01 UDP_Client 00:91:4C:20:FC:01 (unknown)
Resources
Distributing a global IPv6 prefix
Connecting the Nordic nRF52 chip to IPv6 networks via 6LoWPAN
Prepare the Linux router device by initializing the 6LoWPAN module.
IoT example using UDP
Setup a SoftDevice on the nFR52 using gcc
make flash_softdevice
Running the makefile will erase any existing SoftDevice and program the appropriate SoftDevice for the example.
Resources
https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.sdk5.v14.2.0/iot_sdk_app_udp.html
Nordic's IPv6 Stack based UDP Examples
Now trying the IoT Lightweight IP example Problem? There is no 10056 directory, only 10040 Good news. This is not a show stopper. All of the PCA10040 examples will work with the nRF52840, you'll just have to do a little extra work to port it over.
In
/Projects/nRF5_SDK_14.2.0_17b948a/examples/iot/udp/lwip/client/pca10040/s132/armgcc
make flash_softdevice nrfjprog -f NRF52 --program _build/nrf52832_xxaa.hex --sectorerase nrfjprog -f NRF52 --reset
Resources
You should be familiar with the IPv6 addressing model as defined in specification RFC 4291 to understand the following content.