(仮)釣りと電子工作 MikroCでFRAMとのSPI接続に挑戦 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[346] [345] [343] [342] [341] [340] [339] [338] [337] [336] [335]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2年前からいろいろいじっている車載マイコンであるが、何かときどき再起動している気がする。再起動したときのために変数をChip内蔵のEEPROMに記憶するようにしていたが、秒に数十回書き換えているとEEPROMの書換回数が許容をあっという間に超えそうなので、そこで値をSUNのワークステーションのようにNVRAMに書き込もうと思った。

NVRAM高いだろうなぁ、、と思って調べたら、やっぱり高い。と、いろいろ探していると、FRAM(FeRAMともいうらしい)というデバイスを見つけた。どうやら昔ながらのNVRAMは、もう時代遅れらしい。小容量でいいなら、EEPROMもフラッシュメモリーも、今後はこのFRAMに置き換えられていくのだろう。きっと。

で、このFRAMは国内では富士通が作っているようだ。富士通が作る書換可能な不揮発性メモリーということで、あの銘機BUBCOM80やバブルシステムを生み出す原動力となったバブルメモリーの末裔といえるだろう。で、この富士通のFRAMを最初は使おうと思ったが、車載で使える温度帯のものがなくて、仕方なくRamtron(Cypress)のFRAMにした。RamtronのやつはI2Cインターフェースがないので、仕方なくSPIインターフェースのやつを選んだ。それが、FM25040B、である。まあ富士通じゃないけど頭にFMが付いているし、まあいいか。

で、まず結線から。左がFRAM、右がPIC16F1827。

/CS  ----  デジタル出力ポート
/WP ----  5V
/HOLD ---- 5V
SCK ----  SCK1
SI ---- SDO1
SO ---- SDI1
VSS --- GND
VDD ---- 5V

AVRと違って、PICはINとOUTがクロスするので、ちょっと注意が必要。

で、コーディングであるが、主要なところだけ抽出すると、

前処理。ファイルの先頭やmainの前や頭に書く。
#define FRAM_CS         PORTA.f2
// CS :RA2
// SCK:RB4
// SDI:RB1
// SDO:RB2
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;
  APFCON0=0b10000001;
  APFCON1=0b00000001;
  OSCCON=0b11110000;  // 8MHz x 4
  OPTION_REG=0b00000011; // 1:16 , RB pullup enabled

  ANSELA   = 0b00000011;
  ANSELB   = 0b11000000;
  PORTA   = 0;
  TRISA   = 0b11110011; // 1 ... input
  PORTB   = 0;
  TRISB   = 0b11000010;
  PIR1=0;

  unsigned short dummy;
  unsigned char iscv_cnt;
  unsigned char iscv_sts=1;


SPIの初期化は
  FRAM_CS=1;
  SPI1_Init();

メモリー読み出しは
  FRAM_CS=0;
  SPI1_Write(0b00000011); // Memory Read
  SPI1_Write(0x00); // Address
  iscv_cnt=SPI1_Read(dummy);
  iscv_sts=SPI1_Read(dummy);
  FRAM_CS=1;

メモリー書き込みは
    FRAM_CS=0;
    SPI1_Write(0b00000110); // Write Enable
    FRAM_CS=1;
    FRAM_CS=0;
    SPI1_Write(0b00000010); // Memory Write
    SPI1_Write(0x00); // Address
    SPI1_Write(iscv_cnt);
    SPI1_Write(iscv_sts);
    FRAM_CS=1;

とりあえず、これで動いた。
SPI1_Initは初めに1回実行すればいいみたい。
SPI1_Write(0b00000110)は書き込み毎に毎回実行しなければいけないみたい。
次に書き込みにいくとオートロックされちゃってるみたいな感じ。











PR
この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
リンク
最新TB
バーコード
ブログ内検索
カウンター
Powered by ニンジャブログ  Designed by 穂高
Copyright © (仮)釣りと電子工作 All Rights Reserved
忍者ブログ / [PR]