15章:Samp_I2C(EEPROM24FC256-I/P)の動作試験

    作成2014.08.24

     Samp_I2C(EEPROM24FC256-I/P)について検討します。

  1. Samp_I2C(EEPROM24FC256-I/P)評価回路図
     Samp_I2C(EEPROM24FC256-I/P)評価回路図を図14-1に示します。

    ZigBeeワイヤレスモジュール TWE−LiteをUSBアダプター TWE−Lite R(トワイ・ライター)に 取付けて評価します。

     EEPROM24FC256-I/Pの詳細仕様は下記アドレスを参照します。
    http://akizukidenshi.com/catalog/g/gI-03568/

    品名単価個数小計購入先
    ZigBeeワイヤレスモジュール TWE−Lite Dip−WA (半完成品セミキット)162011620秋月電子通商
    USBアダプター TWE−Lite R(トワイ・ライター)189011890秋月電子通商
    シリアルIスケアC EEPROM 24FC256−I/P90190秋月電子通商


  2. Samp_I2C(EEPROM24FC256-I/P)評価回路外観
      Samp_I2C(EEPROM24FC256-I/P)評価回路外観を以下に示します。



  3. Samp_I2C
    ToCoNet SDKは下記のアドレスからダウンロードします。
    http://tocos-wireless.com/jp/products/ToCoNet/TWESDK.html
     ダウンロード
    Windows 版 2014/8月号 SDK SDK 全部入り (582MiB, ZIP)をダウンロードします。


  4. 動作試験用プログラムのダウンロード
     動作試験用プログラムは「40-15.zip」ファイルをダウンロードしてください。
    [40-15.zip]をダウンロードする。

     解凍するとフォルダー内に
    Samp_I2Cフォルダー(Samp_I2Cソースファイル)
    Win-PingPong.exe(10章と同じ)
    があります。
     Samp_I2Cフォルダー内の\Samp_I2C\Main\Build\Samp_I2C_Main_JN5164_0_2_0.binが実行ファイルです。


  5. 基本操作方法
    (1)\Samp_I2C\Main\Build\Samp_I2C_Main_JN5164_0_2_0.binを無線マイコンTWE-Lite DIP (トワイライト・ディップ)に書込みます。(方法は7章:ToCoNet(トコネット)のソフトウエア開発環境(SDK) とPingPongの実行プログラムの書込みを参照願います。

    (2)TWE-Lite R(トワイ・ライター)に無線マイコンTWE-Lite DIP (トワイライト・ディップ)をセットしてUSBをパソコンに接続します。
    (3)「Win-PingPong.exe」をダブルクリックで起動します。
    (4)画面の左側を「COM9」にセットして、「Conect」ボタンを押します。
    (5)TWE-Lite R(トワイ・ライター)のリセットボタンを押します。
    (6)以下の画面から「COM9」がTWE-Lite R(トワイ・ライター)に接続されていることが確認できます。

    (7)左側のSend Dataに「m」を入力し「Send Data vbCrLf無し」ボタンを押と測定を実行します。



  6. Samp_I2Cのソース変更部分
    EEPROM24FC256-I/P対応の変更は思いのほか苦労しました!!
    void vSMBusInit(void)
    {
    	//vAHI_SiMasterConfigure(TRUE, FALSE, 47);
    	vAHI_SiMasterConfigure(TRUE, FALSE, 100);//47→100に変更しないと動作しませんでした!!
    }
    
    static void vHandleSerialInput(void)			
    case 'm':			
    	vfPrintf(&sSerStream, "24F256-TEST\r\n");		
    			
    	vAHI_SiMasterWriteSlaveAddr(0x50, FALSE);		
    	START_WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	vAHI_SiMasterWriteData8(0x00);		
    	WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	vAHI_SiMasterWriteData8(0x00);		
    	WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	vAHI_SiMasterWriteData8(0xaa);		
    	WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	vAHI_SiMasterWriteData8(0xbb);		
    	WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	STOP_WRITE_NACK();		
    	for(x = 0; x < 16000; x++){;}		
    			
    	vAHI_SiMasterWriteSlaveAddr(0x50, FALSE);		
    	START_WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	vAHI_SiMasterWriteData8(0x00);		
    	WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	vAHI_SiMasterWriteData8(0x00);		
    	WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	vAHI_SiMasterWriteSlaveAddr(0x50, TRUE);		
    	START_WRITE_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    			
    	READ_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */	
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    	pu8Dest[0]=u8AHI_SiMasterReadData8();		
    	vfPrintf(&sSerStream, "%x \r\n",pu8Dest[0]);	
    	READ_ACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */		
    	vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());		
    	pu8Dest[0]=u8AHI_SiMasterReadData8();		
    	vfPrintf(&sSerStream, "%x \r\n",pu8Dest[0]);		
    			
    	STOP_READ_NACK();		
    	while(bAHI_SiMasterPollTransferInProgress()); /* busy wait */		
    			
    	break;				
    


  7. 結果の検討
    (1)I2Cの詳細の通信手順はデバイス毎に異なるため、Samp_I2Cをそのままで動作試験できない。
    (2)I2C通信用関数の使用方法を理解し、個々のデバイスの通信手順をあわせる必要がある。
    (3)EEPROM24FC256-I/PのI2C通信プログラムでは
    bool_t bSMBusWrite(uint8 u8Address, uint8 u8Command, uint8 u8Length, uint8* pu8Data)
    PUBLIC bool_t bSMBusSequentialRead(uint8 u8Address, uint8 u8Length, uint8* pu8Data)
    がうまく適用できませんでした。
    (4)vAHI_SiMasterWriteSlaveAddr(0x50, FALSE);等の基本関数を使用しました。
    (5)vfPrintf(&sSerStream, "%d %d ", bAHI_SiMasterPollArbitrationLost(),bAHI_SiMasterCheckRxNack());は通信動作確認表示用で正常に動作すると[0 0 ]を表示します。
    (6)本プログラムサンプルではEEPROM24FC256-I/Pのアドレス0x0000に0xaa、0x0001に0xbbが書き込まれます。
    (7)0x0000からは0xaa、0x0001karaha0xbbが読み出され表示されます。
    (8)[0 0 ]の表示は通信動作が正常であることを意味します。
    (9)vAHI_SiMasterConfigure(TRUE, FALSE, 47→100);の変更前は通信不良で[0 1 ]表示となり、書込みと読み出しができませんでした!!(これに気づくのが大変でした!!!)
    (10)Win-PingPong.exe(10章と同じ)はデバッグ目的のプログラムですが変更の必要はありませんでした。




16章:無線式メロディ合図機の製作に行く。

トップページに戻る。