🤺

STM32で i2cdetect をさせたい。

2024/05/30に公開

これは何?

STM32でCubeMXを用いたI2Cdetectが欲しかった。

i2cdetect は、RaspberryPi等で使われるI2Cバスに何が繋がっているかを調べるコマンドです。

ソース

void i2cdetect()
{
	uint8_t first = 0x03;
	uint8_t last = 0x77;
	HAL_StatusTypeDef result;
	  // table header
    printf("-------------------------------------------------------------------\r\n");
    printf("    ");
    for (int i = 0; i < 16; i++)
	    printf("%3x", i);
	printf("\r\n");
	uint8_t address;
	for (address = 0; address <= 119; address++)
	{
		if (address % 16 == 0)
			printf("\r\n%02x:", address & 0xF0);
	    if (address >= first && address <= last)
	    {
	    	result = HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)(address<<1), 1, 1);
	    	if (result == HAL_OK)
	    		printf(" %02x", address);
	    	else if (result != HAL_OK) // HAL_ERROR or HAL_BUSY or HAL_TIMEOUT
	    		printf(" --");
	    	else
	    		printf(" XX");
	    }
	    else
	    {
	    	printf("   ");
	    }
	}
	printf("\r\n");
	HAL_Delay(1000);
}

やった事

result = HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)(address<<1), 1, 1);

この関数が、I2Cに指定のアドレスがあるか確認してます。

アドレスだけ送信してACKが返ってくるか確認しているみたい。

締め

当方は技術コンサルタントとして色んな電子機器の開発等に関わっております。
もし御案件等御座いましたら、お気軽にご連絡頂ければ幸いです。
https://artifactnoise.com/

それでは、またどこかで
ArtifactNoise合同会社 北神雄太

Discussion