通过spi-config 设置speed无效,如下
# spi-config -d /dev/spidev0.1 -s 2000000
#
# spi-config -d /dev/spidev0.1 -q
/dev/spidev0.1: mode=0, lsb=0, bits=8, speed=1000000, spiready=0
2023/03/17 13:53
可以查看MA35D1_Buildroot/output/build/linux-custom/drivers/spi/spidev.c 里面 spidev_release()这个函数,把下面函数的spidev->speed_hz = spidev->spi->max_speed_hz;语句移除即可。
static int spidev_release(struct inode *inode, struct file *filp)
{
...
if (!spidev->users) {
kfree(spidev->tx_buffer);
spidev->tx_buffer = NULL;
kfree(spidev->rx_buffer);
spidev->rx_buffer = NULL;
if (dofree)
kfree(spidev);
else
spidev->speed_hz = spidev->spi->max_speed_hz;
}
...
}
意思就是spi-config操作过程会执行spedev open ,操作 close 后 ,speed 会恢复默认值。验证方式可以参考林工的做法加 “-w &”
表示在后台一直“spedev open”,所以speed会改动,后台不运行,speed就恢复默认值。
至于内核为什么这么做,猜测是考虑spi设备有很多,不同设备有不同速度要求,一个设备操作完,那么close后,恢复默认speed。
当然修改speed,可以直接修改设备树这个参数spi-max-frequency = <1000000>;