2018-07-26 11:48:55 +02:00
|
|
|
|
/**
|
|
|
|
|
@defgroup boards_fox fox
|
|
|
|
|
@ingroup boards
|
|
|
|
|
@brief Support for the fox board
|
|
|
|
|
|
|
|
|
|
## Components
|
|
|
|
|
|
2020-06-04 10:13:18 +02:00
|
|
|
|
| MCU | [ST2M32F103REY](http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164485) – 32-bits |
|
|
|
|
|
|:------------- |:------------------------------------------------------------------------------------------------- |
|
|
|
|
|
| RAM | 64KiB |
|
|
|
|
|
| Flash | 512KiB |
|
|
|
|
|
| radio chipset | [AT86RF231](http://www.atmel.com/images/doc8111.pdf) |
|
|
|
|
|
| | a IEEE802.15.4-compliant radio at 2.4 GHz |
|
2018-07-26 11:48:55 +02:00
|
|
|
|
|
|
|
|
|
## Implementation Status
|
|
|
|
|
|
2020-06-04 10:13:18 +02:00
|
|
|
|
| Device | ID | Supported | Comments |
|
|
|
|
|
|:----------------- |:------------- |:----------|:------------------------- |
|
|
|
|
|
| MCU | [STM23F103REY](http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf) | partly | Energy saving modes not fully utilized |
|
|
|
|
|
| Low-level driver | GPIO | yes | |
|
|
|
|
|
| | PWM | no | |
|
|
|
|
|
| | UART | full | |
|
|
|
|
|
| | I2C | yes | |
|
|
|
|
|
| | SPI | yes | one SPI device for now |
|
|
|
|
|
| | USB | no | |
|
|
|
|
|
| | RTT | yes | in progress |
|
|
|
|
|
| | RNG | no | no HW module |
|
|
|
|
|
| | Timer | full | |
|
|
|
|
|
| Radio Chip | AT86RF231 | partly | will be remodelled soon |
|
2018-07-26 11:48:55 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### Note on at86rf231 radio driver
|
|
|
|
|
|
|
|
|
|
The current implementation of the radio driver for the at86rf231 chip uses
|
|
|
|
|
the basic operation modes. This gives
|
|
|
|
|
you basic sending and receiving functionality but no hardware address
|
|
|
|
|
filtering and no auto-ACKs etc. Due to the fact this radio device is an IEEE
|
|
|
|
|
802.15.4 compliant device it supports radio channels from 11 to 26. When trying
|
|
|
|
|
to set a channel out of range the driver returns an error and prints a message
|
|
|
|
|
with `DEVELHELP` enabled.
|
|
|
|
|
|
|
|
|
|
## Toolchains
|
|
|
|
|
|
|
|
|
|
See [ARM Family](https://github.com/RIOT-OS/RIOT/wiki/Family:-ARM)
|
|
|
|
|
|
|
|
|
|
Working:
|
|
|
|
|
* [gcc-arm-embedded](https://github.com/RIOT-OS/RIOT/wiki/Family:-ARM#gcc-
|
|
|
|
|
arm-embedded-toolchain)
|
|
|
|
|
* [gcc-linaro](https://github.com/RIOT-OS/RIOT/wiki/Family:-ARM#linaro-
|
|
|
|
|
toolchain)
|
|
|
|
|
|
|
|
|
|
### Programming and Debugging
|
|
|
|
|
|
|
|
|
|
In order to program (flash) and debug the node you need
|
|
|
|
|
[OpenOCD](http://openocd.sourceforge.net/) and an ARM version of gdb (`arm-none-
|
|
|
|
|
eabi-gdb`), which provided by most toolchains. Most Linux distributions provide
|
|
|
|
|
also a package for OpenOCD. The required configuration files are provided by
|
|
|
|
|
RIOT.
|
|
|
|
|
When starting the debugger with `make debug BOARD=fox` GDB connects to
|
|
|
|
|
openocd, loads the elf-file and puts the MCU into halt state. Before setting
|
|
|
|
|
breakpoints it is sometimes needed to use the following workflow
|
|
|
|
|
```
|
|
|
|
|
bash
|
|
|
|
|
monitor reset run
|
|
|
|
|
monitor reset halt
|
|
|
|
|
b <breakpoint>
|
|
|
|
|
c
|
|
|
|
|
```
|
|
|
|
|
For best debugging experience also change the `-Os` flag in
|
|
|
|
|
`Makefile.inlcude`'s `CFLAGS` variable to `-O0`.
|
|
|
|
|
|
|
|
|
|
## Debugging
|
|
|
|
|
|
|
|
|
|
For debugging you need to open a terminal. Here you simply have to call `make
|
|
|
|
|
debug` - assuming that the current directory is your application directory. It
|
|
|
|
|
establishes an openocd connection to the device and starts gdb connected to the
|
|
|
|
|
openocd instance. For example, it should look something like this
|
|
|
|
|
```
|
|
|
|
|
[user@host RIOT]$ cd examples/default/
|
|
|
|
|
[user@host default]$ BOARD=fox make
|
|
|
|
|
Building application default for fox w/ MCU stm32f1.
|
|
|
|
|
...
|
|
|
|
|
[user@hostdefault]$ BOARD=fox make debug
|
|
|
|
|
RIOT/boards/hikob-common/dist/debug.sh RIOT/boards/fox/dist/gdb.conf
|
|
|
|
|
RIOT/examples/default/bin/fox/default.elf
|
|
|
|
|
Open On-Chip Debugger 0.8.0 (2014-07-27-20:18)
|
|
|
|
|
Licensed under GNU GPL v2
|
|
|
|
|
For bug reports, read
|
|
|
|
|
http://openocd.sourceforge.net/doc/doxygen/bugs.html
|
|
|
|
|
GNU gdb (GNU Tools for ARM Embedded Processors) 7.4.1.20140401-cvs
|
|
|
|
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
|
|
|
|
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
|
|
|
|
|
This is free software: you are free to change and redistribute it.
|
|
|
|
|
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
|
|
|
|
|
and "show warranty" for details.
|
|
|
|
|
This GDB was configured as "--host=x86_64-apple-darwin10 --target=arm-none-
|
|
|
|
|
eabi".
|
|
|
|
|
For bug reporting instructions, please see:
|
|
|
|
|
<http://www.gnu.org/software/gdb/bugs/>...
|
|
|
|
|
Reading symbols from RIOT/examples/default/bin/fox/default.elf...done.
|
|
|
|
|
idle_thread (arg=<optimized out>) at RIOT/core/kernel_init.c:67
|
|
|
|
|
67 lpm_set(LPM_IDLE);
|
|
|
|
|
JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part:
|
|
|
|
|
0xba00, ver: 0x3)
|
|
|
|
|
JTAG tap: stm32f1x.bs tap/device found: 0x06414041 (mfg: 0x020, part: 0x6414,
|
|
|
|
|
ver: 0x0)
|
|
|
|
|
target state: halted
|
|
|
|
|
target halted due to debug-request, current mode: Thread
|
|
|
|
|
xPSR: 0x01000000 pc: 0x0800027c msp: 0x20002200
|
|
|
|
|
Loading section .text, size 0x6df4 lma 0x8000000
|
|
|
|
|
Loading section .ARM.exidx, size 0x8 lma 0x8006df4
|
|
|
|
|
Loading section .relocate, size 0x120 lma 0x8006dfc
|
|
|
|
|
Start address 0x8000000, load size 28444
|
|
|
|
|
Transfer rate: 11 KB/sec, 7111 bytes/write.
|
|
|
|
|
(gdb) c
|
|
|
|
|
Continuing.
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The node will reboot and you can continue to use `gdb` like you're used to.
|
|
|
|
|
In some cases it
|
|
|
|
|
seems necessary to prepend a `monitor reset run` before executing continue.
|
|
|
|
|
In general you can
|
|
|
|
|
use openocd commands prepended by `monitor`.
|
2019-10-23 21:13:11 +02:00
|
|
|
|
In the case the node crashes it can be reset with the following sequence
|
2018-07-26 11:48:55 +02:00
|
|
|
|
```
|
|
|
|
|
Bash
|
|
|
|
|
(gdb) monitor reset halt
|
|
|
|
|
(gdb) monitor reset run
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
For terminal output on OS X (`make term`) you need to install a driver:
|
|
|
|
|
http://www.ftdichip.com/Drivers/VCP.htm
|
|
|
|
|
http://www.ftdichip.com/Drivers/VCP.htm
|
|
|
|
|
*/
|