2017年03月22日

I2C Device Search サンプルコード

今回はI2Cデバイスのアドレスを検索して、
一覧を表示するデバイスサーチについて紹介します。


環境はこれまで同様、
・STM32F303K8
 +SW4STM32(System Workbench for STM32)
 +STM32CubeMX(HAL ライブラリ、F3 ver. 1.60)
です。


raspberryPIやArduinoなどでは
I2Cデバイスサーチのコードが公開されており、
I2Cデバイスのアドレス確認や正常動作の確認に使えるので
非常に便利です。

ただ、STM32のHALライブラリで書かれたものがなかったので、
作成してみました。


void I2C_Dev_Search(){

    uint8_t FindNum=0;
    uint8_t FindDev[128];

    printf("*** I2C Device Search Start! ***\n\r");
    for(int i=0; i<0xff;i=i+2){

        uint8_t res=HAL_I2C_Master_Transmit(&hi2c1, i,(uint8_t*)0x00,0,50);
        if(res==HAL_OK){
            FindDev[FindNum]=i;
            FindNum++;
            printf("[0x%X] \t",i);
        }
        else{
            printf("0x%X \t",i);
        }

        if((i+2)%10==0)printf("\n");
        HAL_Delay(1);
    }
    printf("\nDevice Found: %d \n",FindNum);
    for(int i=0; i<FindNum; i++){
        printf("Device No. %d  Address: 0x%X (0x%X)\n",i+1,FindDev[i],FindDev[i]>>1);
    }
    printf("*** I2C Device Search Finished! ***\n\r");
    HAL_Delay(100);

}


上記の関数をmain関数内で実行するとデバイス名が一覧で表示されます。

i2c-search.png

上記では加速度、ジャイロセンサが一体の
MPU6050を接続した際のアドレスが表示されています。

0xD0がHALライブラリで使用するアドレスとなります。
データシートでは読込書込みビットを除いた0x68が
アドレスとして説明されています。

Githubにプロジェクトファイル含めてアップしました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック