📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == FRAM / FeRAM (Ferroelectric Random Access Memory)は、強誘電体材料を使用して情報を記憶して、電界の向きによって分極状態を変化させてデータを保存するメモリである。<br> 多くのFRAM製品は、SPIやI2Cインターフェースを採用している。<br> <br> FRAMは、高速性、低消費電力、高い信頼性が求められる用途で特に有用である。<br> ただし、大容量のストレ…」
 
 
(同じ利用者による、間の2版が非表示)
122行目: 122行目:
# 100[mS]待機する。
# 100[mS]待機する。
# FRAMのアドレス0x00から4バイトのデータを読み出す。
# FRAMのアドレス0x00から4バイトのデータを読み出す。
<br>
[[ファイル:MSP430F149 FeRAM FM24CL Flowchart.jpg|フレームなし|中央]]
<br>
<br>
  <syntaxhighlight lang="c">
  <syntaxhighlight lang="c">
158行目: 160行目:
  void initI2C(void)
  void initI2C(void)
  {
  {
     P3SEL    |= BIT1 + BIT3;                 // P3.1 = SCL, P3.3 = SDA
     P3SEL    |= BIT1 + BIT3;             // P3.1 = SCL, P3.3 = SDA
     U0CTL    = I2C + SYNC + MST;           // I2Cマスターモード、同期
     U0CTL    = I2C + SYNC + MST;         // I2Cマスターモード、同期
     I2CTCTL  = I2CSSEL1;                   // SMCLKをクロック源として選択
     I2CTCTL  = I2CSSEL1;                 // SMCLKをクロック源として選択
     I2CPSC    = 0;                           // プリスケーラなし
     I2CPSC    = 0;                       // プリスケーラなし
     I2CSCLH  = 0x50;                       // SCL High時間
     I2CSCLH  = 0x50;                     // SCL High時間
     I2CSCLL  = 0x50;                       // SCL Low時間 (約100[kHz])
     I2CSCLL  = 0x50;                     // SCL Low時間 (約100[kHz])
     I2COA    = 0x01A5;                     // 自局アドレス
     I2COA    = 0x01A5;                   // 自局アドレス
     I2CSA    = FRAM_ADDR;                   // スレーブアドレス
     I2CSA    = FRAM_ADDR;               // スレーブアドレス
     U0CTL    &= ~I2CEN;
     U0CTL    &= ~I2CEN;                   // I2Cモジュールを一時的に無効化
     U0CTL    |= I2CEN;                       // I2C有効化
     U0CTL    |= I2CEN;                   // I2C有効化
     I2CIFG    = 0x00;                       // 割り込みフラグクリア
     I2CIFG    = 0x00;                     // 割り込みフラグクリア
  }
  }
   
   
180行目: 182行目:
   
   
     while (len--) {
     while (len--) {
       while ((I2CIFG & TXRDYIFG) == 0); // TXバッファが空になるまで待機
       while ((I2CIFG & TXRDYIFG) == 0); // TXバッファが空になるまで待機
       I2CDRB = *data++;                 // データを送信
       I2CDRB = *data++;                 // データを送信
     }
     }
   
   
240行目: 242行目:
* <u>MSP430F149のI2Cクロック周波数は、I2CSCLH/I2CSCLLレジスタで調整可能である。</u>
* <u>MSP430F149のI2Cクロック周波数は、I2CSCLH/I2CSCLLレジスタで調整可能である。</u>
<br>
<br>
==== MB85RC256V / MB85RC512T (I2C) ====
==== MB85RC256V / MB85RC512T (I2C) ====
以下の例では、MSP430F149マイコンとMB85RC256VまたはMB85RC512T (FRAM) を使用してデータを読み書きしている。<br>
以下の例では、MSP430F149マイコンとMB85RC256VまたはMB85RC512T (FRAM) を使用してデータを読み書きしている。<br>
258行目: 261行目:
*: I2C通信のクロック周波数は約100[kHz]に設定している。
*: I2C通信のクロック周波数は約100[kHz]に設定している。
*: FRAMはより高速な通信も可能であるが、MSP430F149マイコンの制限を考慮している。
*: FRAMはより高速な通信も可能であるが、MSP430F149マイコンの制限を考慮している。
<br>
[[ファイル:MSP430F149 FeRAM MB85RC Flowchart.jpg|フレームなし|中央]]
<br>
<br>
  <syntaxhighlight lang="c">
  <syntaxhighlight lang="c">