はじめに †Contiki OS + TelosBで実験をしていると、スリープ時でも消費電流が690 uAと結構大きいことが発覚しました。 データシートを見ると数 uAぐらいまでは落ちるはずです。 いろいろ調べたところ、Contiki OSの本体の深いところまでいじらないといけない様子。 Flashメモリのpower down †TelosBはフラッシュメモリとしてM25P80を使ってます。 ところがContiki OSにはM25P80をPower Downモードにするコマンドが実装されてません。 というわけで以下のコードを追加します。 core/dev/xmem.h †以下を追加。 void xmem_deep_power_down(void); int xmem_release_from_deep_power_down(void); platform/sky/dev/xmem.c †void xmem_deep_power_down(void) { spl_t s; s = splhigh(); SPI_FLASH_ENABLE(); SPI_WRITE(SPI_FLASH_INS_DP); SPI_FLASH_DISABLE(); splx(s); } #define M25P80_SIGNATURE 0x13 int xmem_release_from_deep_power_down(void) { unsigned char signature; spl_t s; s = splhigh(); SPI_FLASH_ENABLE(); SPI_WRITE(SPI_FLASH_INS_RES); SPI_WRITE(0); /* Three dummy bytes */ SPI_WRITE(0); /* Three dummy bytes */ SPI_WRITE(0); /* Three dummy bytes */ FASTSPI_CLEAR_RX(); FASTSPI_RX(signature); SPI_FLASH_DISABLE(); splx(s); if (signature == M25P80_SIGNATURE) return 0; /* Success */ else return -1; /* Fail */ } |