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; }
コメント
toho_hongu
at_makoto.sato
2024年2月15日 16時59分
佐藤です。
> 現象としては、下記のソースコードにて、エラーログが残っておりました。
> 予想として「ioctl()」にてエラー(戻り値「-1」)となっていると考えておりますが、
具体的にどのようなエラーが出力されていますでしょうか。
エラーケースで perror() 関数等を呼び出して出力してみてください。