/**
@defgroup    boards_fox fox
@ingroup     boards
@brief       Support for the fox board

## Components

| 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                                                         |

## Implementation Status

| 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 |


##### 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`.
In the case the node crashes it can be reset with the following sequence
```
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
 */
