README
======
The Olimex STM32-E407 configuration is based on the configuration
olimex-stm32-h407 and stm32f4discovery.

Configurations
==============

  Instantiating Configurations
  ----------------------------
  Each Olimex-STM32-E407 configuration is maintained in a sub-directory and
  can be selected as follow:

    tools/configure.sh [OPTIONS] olimex-stm32-e407:<subdir>

  Typical options include -l for a Linux host platform or -c for Cygwin
  host platform. See 'tools/configure.sh -h' for other options.  And
  <subdir> is one of the sub-directories listed below.

  Compile Firmware
  ----------------
  Once you've set the proper configuration, you just need to execute the next
  command:

     make

  If everything goes find, it should return the next two files:

    nuttx.hex
    nuttx.bin

  You can return more kinds of files by setting on menuconfig.

  Flashing the Board
  -----------------
  You can flash this board in different ways, but the easiest way is using
  ARM-USB-TINY-H JTAG flasher device.
  Connect this device to the JTAG connector and type the next command:

    openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg -f target/stm32f4x.cfg -c init -c "reset halt" -c "flash write_image erase nuttx.bin 0x08000000"

  Configuration Directories
  -------------------------

  nsh:
  ---
    Configures the NuttShell (nsh) located at apps/examples/nsh. This
    configuration enables a console on UART2. Support for
    builtin applications is enabled, but in the base configuration no
    builtin applications are selected.

  usbnsh:
  ------
    Configures the NuttShell (nsh) located at apps/examples/nsh. This
    configuration enables a console on USB_OTG1. Support for
    builtin applications is enabled, but in the base configuration no
    builtin applications are selected.

  netnsh:
  ------
    Configures the NuttShell (nsh) located at examples/nsh.  This
    configuration is focused on network testing.

  bmp180:
  ------
    This is a configuration example for the BMP180 barometer sensor. This
    sensor works with I2C, you need to do the next connections:

    BMP180 VIN -> Board 3.3V
    BMP180 GND -> Board GND
    BMP180 SCL -> Board PB6 (Arduino header D1)
    BMP180 SDA -> Board PB7 (Arduino header D0)

    This example is configured to work with the USBNSH instead of UART NSH, so
    the console will be shown over the USB_OTG1 connector.

    On the console, type "ls /dev " and if the registration process goes fine,
    you should see a device called "press0". Now execute the app
    BMP180 to see the ambient pressure value.

  dac:
  ---
    This is a configuration example to use the DAC1 of the board.  The DAC1
    is attached to the PA4 pin (Arduino header D10).

    This example is configured to work with the USBNSH instead of UART NSH, so
    the console will be shown over the USB_OTG1 connector.

    On the console, type "ls /dev " and if the registration process goes fine,
    you should see a device called "dac0". Now execute the app
    dac put a value at the output.

  ina219:
  ------
    This is a configuration example for the INA219 DC current sensor. This
    sensor works with I2C, you need to do the next connections:

    INA219 VIN -> Board 3.3V
    INA219 GND -> Board GND
    INA219 SCL -> Board PB6 (Arduino header D1)
    INA219 SDA -> Board PB7 (Arduino header D0)

    This example is configured to work with the USBNSH instead of UART NSH, so
    the console will be shown over the USB_OTG1 connector.

    On the console, type "ls /dev " and if the registration process goes fine,
    you should see a device called "ina219". Now execute the app
    ina219 to see the ambient pressure value.

  timer:
  -----
    This configuration set the proper configuration to use the timer1 of the
    board.  This example is configured to work with the USBNSH instead of
    UART NSH, so the console will be shown over the USB_OTG1 connector.

    On the console, type "ls /dev " and if the registration process goes fine,
    you should see a device called "timer1".

  mrf24j40-mac:
  ------------
    This configuration set the proper configuration to set the 802.15.4
    communication layer with the MRF24J40 radio. This radio works with
    SPI, you need to do the next connections:

    MRF24J40 VCC  -> Board 3.3V
    MRF24J40 GND  -> Board GND
    MRF24J40 SCLK -> Board PA5 (Arduino header D13)
    MRF24J40 MISO -> Board PA6 (Arduino header D12)
    MRF24J40 MOSI -> Board PB5 (Arduino header D11)
    MRF24J40 CS   -> Board PA4 (Arduino header D10)
    MRF24J40 INT  -> Board PG12 (Arduino header D8)

    This example is configured to work with the USBNSH instead of UART NSH,
    so the console will be shown over the USB_OTG1 connector.

    Once you're on the console, you need to check if the initialization
    process was fine. To do so, you need to type "ls /dev" and you should
    see a device call "ieee0". At this point we need to set-up the network,
    follow the next steps:

      This is an example of how to configure a coordinator:
      i8sak /dev/ieee0 startpan cd:ab
      i8sak set chan 11
      i8sak set saddr 42:01
      i8sak acceptassoc

      This is an example of how to configure the endpoint:
      i8sak /dev/ieee0
      i8sak set chan 11
      i8sak set panid cd:ab
      i8sak set saddr 42:02
      i8sak set ep_saddr 42:01
      i8sak assoc

  mrf24j40-6lowpan:
  ----------------
    This configuration set the proper configuration to use 6lowpan protocol with the MRF24J40
    radio. This radio works with SPI, you need to do the next connections:

    MRF24J40 VCC  -> Board 3.3V
    MRF24J40 GND  -> Board GND
    MRF24J40 SCLK -> Board PA5 (Arduino header D13)
    MRF24J40 MISO -> Board PA6 (Arduino header D12)
    MRF24J40 MOSI -> Board PB5 (Arduino header D11)
    MRF24J40 CS   -> Board PA4 (Arduino header D10)
    MRF24J40 INT  -> Board PG12 (Arduino header D8)

    This example is configured to work with the USBNSH instead of UART NSH, so
    the console will be shown over the USB_OTG1 connector.

    Once you're on the console, you need to check if the initialization process
    was fine. To do so, you need to type "ls /dev" and you should see a device
    call "ieee0". At this point we need to set-up the network, follow the next steps:

      This is an example of how to configure a coordinator:
      i8sak wpan0 startpan cd:ab
      i8sak set chan 11
      i8sak set saddr 42:01
      i8sak acceptassoc

      When the association was complete, you need to bring-up the network:
      ifup wpan0

      This is an example of how to configure the endpoint:
      i8sak wpan0
      i8sak set chan 11
      i8sak set panid cd:ab
      i8sak set saddr 42:02
      i8sak set ep_saddr 42:01
      i8sak assoc

      When the association was complete, you need to bring-up the network:
      ifup wpan0

   If you execute the command "ifconfig", you will be able to see the info of the WPAN0 interface
   and see the assigned IP. This interface can be use with an UDP or TCP server/client application.
