Armadilloフォーラム

Armadillo-X1 SPI通信機能設定時のエラー要因

toho_hongu

2024年2月15日 13時28分

お世話になっております。

SPI通信機能の設定時にエラーとなる要因として、考えられることはありますでしょうか。
エラー発生頻度としては、毎回でなく稀に発生します。

現象としては、下記のソースコードにて、エラーログが残っておりました。
予想として「ioctl()」にてエラー(戻り値「-1」)となっていると考えておりますが、
その要因が分かりません。

考えられる要因がありましたら、ご教授お願い致します。

#define SPI_DEVICE_PATH			"/dev/spidev1.0"
 
int main(int argc, char *argv[])
{
	int fd;
	fd = spi_open(SPI_DEVICE_PATH);
 
	if (fd < 0) {
		/*  エラーログ出力 */
	}
}
 
int spi_open(const char *dev_path)
{
	int fd;
	uint8_t mode = AD01_SPI_MODE;
	int error;
	int rc;
 
	/* check device path */
	if (dev_path == NULL) {
		errno = EINVAL;
		return -1;
	}
 
	/* SPI device open */
	fd = open(dev_path, O_RDWR, S_IRWXO);
	if(fd < 0) {
		error = errno;
		goto err1;
	}
 
	/* Set SPI mode for write */
	rc = ioctl(fd, SPI_IOC_WR_MODE, &mode);
	if (rc < 0) {
		error = errno;
		goto err2;
	}
 
	/* Set SPI mode for read*/
	rc = ioctl(fd, SPI_IOC_RD_MODE, &mode);
	if (rc < 0) {
		error = errno;
		goto err2;
	}
 
	return fd;
 
err2:
	close(fd);
 
err1:
	errno = error;
 
	return -1;
}
コメント

佐藤です。

> 現象としては、下記のソースコードにて、エラーログが残っておりました。
> 予想として「ioctl()」にてエラー(戻り値「-1」)となっていると考えておりますが、
具体的にどのようなエラーが出力されていますでしょうか。
エラーケースで perror() 関数等を呼び出して出力してみてください。

佐藤様
ご回答ありがとうございます。ご返信が遅れまして申し訳ございません。

ユーザーの環境で発生しており、弊社内で現象の再現が出来ていない為、
どのエラーが発生しているか分からない状況です。
引き続き調査を行う予定の為、進展があり次第ご相談をさせて頂きます。