[Tinyos-help] Using I2C Bus for MSP430

Matteo Andretto andretto at dei.unipd.it
Thu Dec 7 03:25:54 PST 2006


Hi all,
   I'm facing some problems in using the I2C bus of a telosb mote in TinyOS 2.

I request resource I2C bus and when granted event is signalled I call  
an I2C write operation, after that I get the writeDone event, but with  
error FAIL.
If I call another I2C write command, I don't get any writeDone signal back.

I have read previous posts about this but I have not understood how to  
solve it.
I report here part of code that reproduce the problem.

Any suggestion?

Thanks
Matteo

------------------------------------------------------
#include "I2C.h"

configuration I2CappC{
}
implementation
{
   components MainC, I2Capp, LedsC;
   	I2Capp -> MainC.Boot;
   	I2Capp.Leds -> LedsC;

   components new TimerMilliC() as Timer;
	I2Capp.Timer -> Timer;

   components new Msp430I2CC();
   	I2Capp.I2CBasicAddr->Msp430I2CC;
   	I2Capp.Resource -> Msp430I2CC;
}

------------------------------------------------------
module I2Capp
{
   uses interface I2CPacket<TI2CBasicAddr> as I2CBasicAddr;
   uses interface Boot;
   uses interface Leds;
   uses interface Resource;
   uses interface Timer<TMilli> as Timer;
}

implementation{
   uint8_t buf = 0x0F;

   event void Boot.booted(){
	call Resource.request();
   }

   async event void I2CBasicAddr.writeDone(error_t error, uint16_t  
addr, uint8_t length, uint8_t* data){
	call Leds.led2Toggle();
	call Timer.startOneShot(1024);
     return;
   }

   async event void I2CBasicAddr.readDone(error_t error, uint16_t  
addr, uint8_t length, uint8_t* data){
     return;
   }

   event void Resource.granted(){
	call Timer.startOneShot(1024);
     return;
   }

   event void Timer.fired() {
	if (call I2CBasicAddr.write(I2C_START|I2C_STOP, 126, 1, &buf)==SUCCESS)
		call Leds.led1Toggle();
	return;
   }
}



More information about the Tinyos-help mailing list