通过spi-config工具不能把SPI设置为LSB first,但是TRM手册是支持的: Supports MSB first or LSB first transfer sequence。
操作如下
# spi-config -d /dev/spidev0.1 -l 1
[ 900.241414] spidev spi0.1: setup: unsupported mode bits 8
SPI_IOC_WR_LSB_FIRST: Invalid argument
2023/03/17 13:53
关于此问题,内核spi驱动和spi-tool源码,需修改以下两个位置:
位置1 :
MA35D1_Buildroot/output/build/linux-custom/drivers/spi/spidev.c
case SPI_IOC_RD_LSB_FIRST:
retval = put_user((spi->mode & SPI_LSB_FIRST) ? 1 : 0,
(__u8 __user *)arg);
break;
上面的"1" 改为 SPI_LSB_FIRST,如下:
case SPI_IOC_RD_LSB_FIRST:
retval = put_user((spi->mode & SPI_LSB_FIRST) ? SPI_LSB_FIRST : 0,
(__u8 __user *)arg);
break;
位置2 :
MA35D1_Buildroot/output/build/linux-custom/drivers/spi/spi.c
spi_setup()函数里面
bad_bits = spi->mode & ~(spi->controller->mode_bits | SPI_CS_WORD);
改为以下,添加SPI_LSB_FIRST
bad_bits = spi->mode & ~(spi->controller->mode_bits | SPI_CS_WORD | SPI_LSB_FIRST);