本ドキュメントはCypress (サイプレス) 製品に関する情報が記載されております。 AN07-00153-1 F2MC/FR Family 8/16/32-BIT MICROCONTROLLER シリアル通信を使った外部E2PROM制御方法 AN07-00153-1 注意事項 本資料の記載内容は、予告なしに変更することがありますので、ご用命の際は営業部 門にご確認ください。 本資料に記載された動作概要や応用回路例は、半導体デバイスの標準的な動作や使い 方を示したもので、実際に使用する機器での動作を保証するものではありません。従 いまして、これらを使用するにあたってはお客様の責任において機器の設計を行って ください。これらの使用に起因する損害などについては、当社はその責任を負いませ ん。 本資料に記載された動作概要・回路図を含む技術情報は、当社もしくは第三者の特許 権、著作権等の知的財産権やその他の権利の使用権または実施権の許諾を意味するも のではありません。また、これらの使用について、第三者の知的財産権やその他の権 利の実施ができることの保証を行うものではありません。したがって、これらの使用 に起因する第三者の知的財産権やその他の権利の侵害について、当社はその責任を負 いません。 本資料に記載された製品は、通常の産業用、一般事務用、パーソナル用、家庭用など の一般的用途に使用されることを意図して設計・製造されています。極めて高度な安 全性が要求され、仮に当該安全性が確保されない場合、社会的に重大な影響を与えか つ直接生命・身体に対する重大な危険性を伴う用途(原子力施設における核反応制御、 航空機自動飛行制御、航空交通管制、大量輸送システムにおける運行制御、生命維持 のための医療機器、兵器システムにおけるミサイル発射制御をいう)、ならびに極め て高い信頼性が要求される用途(海底中継器、宇宙衛星をいう)に使用されるよう設 計・製造されたものではありません。したがって、これらの用途にご使用をお考えの お客様は、必ず事前に営業部門までご相談ください。ご相談なく使用されたことによ り発生した損害などについては、責任を負いかねますのでご了承ください。 半導体デバイスはある確率で故障が発生します。当社半導体デバイスが故障しても、 結果的に人身事故、火災事故、社会的な損害を生じさせないよう、お客様は、装置の 冗長設計、延焼対策設計、過電流防止対策設計、誤動作防止設計などの安全設計をお 願いします。 本資料に記載された製品を輸出または提供する場合は、外国為替及び外国貿易法およ び米国輸出管理関連法規等の規制をご確認の上、必要な手続きをおとりください。 本書に記載されている社名および製品名などの固有名詞は、各社の商標または登録商 標です。 Copyright© 2008 FUJITSU MICROELECTRONICS LIMITED all rights reserved 1 AN07-00153-1 改版履歴 版数 日付 内容 1.0 版 2008/2/18 新規作成 2 AN07-00153-1 目次 注意事項 ..............................................................................................................................................1 改版履歴 ..............................................................................................................................................2 目次 ......................................................................................................................................................3 1 はじめに ......................................................................................................................................4 2 マニュアル ..................................................................................................................................5 2.1 3 ハード構成 ..................................................................................................................................6 3.1 4 本アプリケーションにて使用されているマニュアルについて ...................................5 推奨回路図 ..........................................................................................................................6 ソフトウエア ..............................................................................................................................7 4.1 動作 ......................................................................................................................................7 4.2 サンプルソフト...................................................................................................................8 4.3 波形 ....................................................................................................................................15 3 AN07-00153-1 1 はじめに 本アプリケーションノートは当社の 16LX ファミリに属する MB90350 シリーズと SII 社 の S-93C56B の EPPROM との通信方式について記述します。 4 AN07-00153-1 2 マニュアル 2.1 本アプリケーションにて使用されているマニュアルについて ・S-93C56B のマニュアルは下記の URL を参照してください。 ftp://ftp.sii.co.jp/pub/ic/speed_dt/dt_sht_j/memory/S93C46B_J.pdf ・MB90350 シリーズのマニュアルは下記の URL を参照してください。 http://edevice.fujitsu.com/jp/manual/MANUALp/ja-pdf/CM44-10140-2.pdf(日本語) http://edevice.fujitsu.com/fj/MANUAL/MANUALp/en-pdf/CM44-10140-2E.pdf(English) ・富士通マイコンに関するハードウエアドキュメント類は下記の URL からダウンロード可 能です。 http://edevice.fujitsu.com/jp/manual/MANUALl/alllistj.html(日本語) http://edevice.fujitsu.com/fj/MANUAL/MANUALl/allliste.html(English) ・富士通マイコンに関するデータシート類は下記の URL からダウンロード可能です。 http://edevice.fujitsu.com/jp/datasheet/jf-lvmb20.html(日本語) http://edevice.fujitsu.com/fj/DATASHEET/ef-lvmb20.html(English) 5 AN07-00153-1 3 ハード構成 3.1 推奨回路図 Vcc MCU IO CS SCK SK SOT DI SIN DO E2PROM GND Figure 1: MCUとE2PROMの接続図 誤動作防止のため、E2PROMのCS、SK、DI、DO端子を抵抗を通してGNDに接続してくだ さい。 本E2PROMはクロック信号に同期して送受信していますので、MB90350 のUARTは同期モ ードに設定した上、使用してください。 6 AN07-00153-1 4 ソフトウエア 4.1 動作 S-93C56B は下記 7 種類の動作をサポートできます。 Table 1: 動作手法 開始ビット 命令 クロック数 1 オペコード 2 3 アドレス 4 5 6 7 データ 8 9 10 11 12∼27 READ 1 1 0 x A6 A5 A4 A3 A2 A1 A0 D15∼D0 WRITE 1 0 1 x A6 A5 A4 A3 A2 A1 A0 D15∼D0 ERASE 1 1 1 x A6 A5 A4 A3 A2 A1 A0 - WRAL 1 0 0 0 1 x x x x x x D15∼D0 ERAL 1 0 0 1 0 x x x x x x - EWEN 1 0 0 1 1 x x x x x x - EWDS 1 0 0 0 0 x x x x x x - まず、MB90350 の UART によって、上記の中の READ 動作の実現方法を説明します。 Figure 1で示した通り、本アプリはクロック同期のUARTを使用します。 (SCK端子が接続さ れています。 ) 例として、EPPROM の 2 番地の内容を読み出そうとします。表 1 に示した通り、EPPROM の DI 端子に対して開始ビットから A0(アドレス最下位)まで“110x0000010”(x は任意) を発行した後に DO 端子から D15∼D0 の 16 ビットデータを得ることができます。このデ ータは本 EPPROM の 2 番地の内容になります。 下記にアクセスタイミングを示します。 Figure 2: READ 動作 7 AN07-00153-1 ここで、一つ注意点があります。 EPPROM に対して発行するデータとして、開始ビットから A0 まで合計 11 ビットですが、 MB90350 の送信バッファーは 8 ビットしかありません。よって、この 11 ビットを MB90350 の内部で 2 回分けて送信しなければなりません。しかも、送信される 1 バイト目の先頭に 5 ビット(2×8−11=5)の 0 を挿入してください。 (1 が受信されるとすぐ開始ビットとして 認識されてしまいます) 4.2 サンプルソフト READ を実現したサンプルソフトを下記に示します。参考してください。 ・ void UART2_Initial(void) ・ void Tr(unsigned char data_for_transmit) ・ int Read(unsigned char Rd_Address) ・ __interrupt void UART2_TX_int(void) 上記各関数の関係を下記に示します。 main() 読み出し int Read(unsigned char Rd_Address) 読み出し① 読み出し② void UART2_Initial(void) void Tr(unsigned char data_for_transmit) 割込み void UART2_Initial(void) Figure 3: プログラム 8 AN07-00153-1 関数名 void UART2_Initial(void) 引数 Void 戻り値 Void 紹介 本関数は UART2 をイニシャルする。動作モードを 2 に設定する void UART2_Initial(void) { IO_ADER5.byte=IO_ADER5.byte&0xF8; //AD8-9 pin disable IO_DDR5.bit.D50=0x00; IO_UART2.BGR2.word=16000/Board_rate-1; //v=(MCLK/b)-1 IO_UART2.SMR2.bit.MD=0x02; //Use MOD2 IO_UART2.SMR2.bit.SCKE=0x01; //CLK output enable IO_UART2.SSR2.bit.BDS=0x01; //Use MSB //IO_UART2.ESCR2.bit.SOPE=0x01; //enable access to UART output pin //IO_UART2.ESCR2.bit.SIOP=0x00; //default output=L IO_UART2.SCR2.bit.TXE=0x01; //enable UART Tx IO_UART2.SCR2.bit.RXE=0x01; //enable UART Rx //IO_UART2.SSR2.bit.RIE=0x01; //Enable Rx interrup //IO_UART2.SSR2.bit.TIE=0x01; /*Enable Tx interrup (when enable this bit, it will jump to interrupt function immediately)*/ IO_UART2.SMR2.bit.SOE=0x01; //data output enable } 9 AN07-00153-1 関数名 void Tr(unsigned char data_for_transmit) 引数 unsigned char data_for_transmit 戻り値 Void 紹介 本関数はグローバル変数である Tr_data を通して送信バッファーをアップ デートする void Tr(unsigned char data_for_transmit) { Tr_data=data_for_transmit; //updata Tr_data IO_UART2.SSR2.bit.TIE=0x01; //go to Tx int function to pass Tr_data } 10 AN07-00153-1 関数名 int Read(unsigned char Rd_Address) 引数 unsigned char Rd_Address 戻り値 Int 紹介 本関数は Read 動作を実現し、引数である Rd_Address によって指定され たアドレスに対してアクセスし、読み出したデータを int 単位で戻す。下記 の方法で本関数を読み出せる。 unsigned char Read_from_add=0x02; int test=Read(Read_from_add); 11 //read from address 0x02 AN07-00153-1 int Read(unsigned char Rd_Address) { unsigned char Tr_data_0=0x06; //start bit & read command unsigned char Tr_data_1=Rd_Address; //read from this address unsigned char Temporariness; //for store temporary data int Received_data_1; int Received_data_2; int Return_data; Command_status=READ_status; UART2_Initial(); IO_PDR2.bit.P24=0x01; //output H for CS IO_DDR2.bit.D24=0x01; //enable output for CS Tr(Tr_data_0); //transmit first data Temporariness=IO_UART2.RDR2; //store received data Tr(Tr_data_1); //transmit second data Temporariness=IO_UART2.RDR2; IO_UART2.ESCR2.bit.SCES=0x01; IO_UART2.SMR2.bit.REST=0x01; //store received data //reverse the clock edge //reset UART //次のページへ 12 AN07-00153-1 Tr(dummy); //transmit dummy data for receive data from EEPROM Received_data_1=IO_UART2.RDR2; //store received data Tr(dummy); //transmit dummy data for receive data from EEPROM Received_data_2=IO_UART2.RDR2; IO_PDR2.bit.P24=0x00; //store received data //output L for CS IO_UART2.ESCR2.bit.SCES=0x00; //no reverse the clock edge Received_data_1=Received_data_1*0x100; Return_data=Received_data_1; Return_data=Return_data|Received_data_2; return Return_data; } 13 //data process AN07-00153-1 関数名 __interrupt void UART2_TX_int(void) 引数 void 戻り値 void 紹介 本関数は UART の送信割込み関数である。送信割込み許可になっている場 合に送信バッファーが空になると本割込み関数に飛び込んでくる。Tr() 関数でアップデートされたグローバル変数である Tr_data を通して UART 送信バッファーにデータをパスしている。 __interrupt void UART2_TX_int(void) { IO_UART2.RDR2=Tr_data; while(IO_UART2.SSR2.bit.TDRE==0x00) __wait_nop(); while(IO_UART2.SSR2.bit.RDRF==0x00) __wait_nop(); IO_UART2.SSR2.bit.TIE=0x00; //disable UART Tx INT } 14 AN07-00153-1 4.3 波形 MCU が 0x04 番地からリード時の実波形を下記に示します。 各チャネルの割り当ては次の通りです。 Ch1:CS、 Ch3:SK、 Ch4:DI、 Figure 4: 波形 Figure 5: 波形の拡大図 15 Ch2:DO