MTS420 Progress

From TinyOS Wiki
Revision as of 15:27, 23 May 2008 by Erunamo (talk | contribs) (Power and Communication Connections: finished section)
Jump to: navigation, search

Completed Work

The documentation of progress should include some main features including, but not limited to:

  • Implementation details
  • Discussion on decisions made
  • Limitations
  • Suggested Improvements
  • Feel free to include more information as well

Code Organization

The code for a sensorboard consists of multiple layers. This section describes how those layers are organized in the tos directory structure.

  • Independent Chip Code - The sensorboard will be an assembly of different chips. Some of those chips will be complicated enough to merit platform independent code and should be located in tos/chips/<chipname> directory.
  • Sensorboard Dependent Chip Code - Some chips will require code specific to the physical connections made on the sensorboard and the code should be located in tos/sensorboards/<boardname>/chips/<chipname> directory.
  • Platform Dependent Sensorboard Code - Some code will depend on the specific platform it is being connected to (for example, anything that uses buses controlled by the platform). That code should be located in tos/platforms/<platformname>/sensorboards/<boardname>/ and organized in a similar chips/<chipname> sub directory as appropriate.
  • Independent Helper Code - Code that can be written to be independent of the sensorboard should be added in an appropriate tos/lib/<name> directory.
  • Dependent Helper Code - Code that exposes useful features of the sensorboard and is specific to the sensorboard should be located in the tos/sensorboards/<boardname>/ directory and any appropriate sub directories if required.

Power and Communication Connections

Power to and communication with the sensors located on the MTS420 sensorboard is controlled by two Analog ADG715 serially controlled octal switches. Those switches are controlled by an I2C bus. The ADG715 manual describes the protocol and calls it a two wire interface (TWI) but it is essentially the I2C Protocol.

  • Independent Chip Code - The independent chip code for the ADG715 is written generically so that it can be instantiated for each specific chip on a given hardware platform. The I2C access is controlled by an arbiter. The platform specific implementation needs to wire the I2CPacket interface to the platform specific I2C bus (including wiring the Resource to the arbiter). There is some error checking but it is by no means exhaustive.
    • Limitations
      • adg715ControlP provides a parameterized Channel interface but the values are limited from 1 to 8 inclusive, by ADG715_CH_MIN and ADG715_CH_MAX in adg715.h (it is an 8 channel chip).
      • Constants are declared as enums without a check to see if they have already been defined because they are parameters that are fixed for the hardware this was designed for.
      • Reading the value (isOpen()) of a channel really only checks a cached copy of the state. The state is never actually checked to verify it was set properly.
      • The code has not been thoroughly tested.
  • MICAz Implementation - Provides a generic configuration that passes through the channels and connects I2CPacket and Resource to the I2C bus on the MICAz. The atm128 microprocessor has the I2C protocol implemented in hardware. The Atm128I2CMasterC uses the hardware implementation of the I2C protocol.
  • MTS420 Implementation - The sensorboard specific implementation needs to have a component available called HplAdg715C which is generic and passes through all 8 channels (named Channel* where * is a number 1 through 8) from adg715ControlC and wires the platform specific I2C code. See the MICAz for an example.

MTS420CA/CB GPS

TODO

Remaining Work

  • Documentation and Code for all sensors except the GPS on the MTS420CA
  • Documentation for the GPS 420CA
  • Documentation for supporting code
  • Refining and Testing GPS Code
    • SiRF packet reception
    • Controlling GPS
    • Test Power (does GPS_ENA need to be high? what does GPS_PWR do?)
  • How To documentation
    • How to use the code
    • File List

Where to find the code

The code is located in the TinyOS Sourceforge CVS repository. The \tinyos-2.x-contrib\rincon\tos\sensorboards\mts420\ directory contains the code that glues all the dependencies together. The .sensor file contains a list of all the dependencies that are also needed.

A simple example is located in \tinyos-2.x-contrib\rincon\apps\tests\TestMts420Gps\. It forwards NMEA GGA messages from the GPS over the radio where a mote running the base station app can receive the information. The NMEA parsing code is incomplete--users beware.