Thread 中讨论的其他器件: OMAPL138
工具/软件:Linux
您好!
我正在尝试让 SPI 通信在 OMAP-L138的新 Linux 处理器 SDK 版本上正常工作。 在之前的 SDK MCSDK_1_01_00_02上、我在更改电路板配置文件、进行一些光驱动器编辑以及在用户空间中为 SPI 配置内核后、能够使 SPI 正常工作。 我编写的用户空间软件使用 spidev 字符设备和 ioctl 调用。
在切换到内核4.9.28的新 SDK 时、情况发生了很大变化。 我修改了器件树 da850-lcdk.dts 并为用户空间 SPI 配置了内核。 对设备树的编辑如下所示:
&SPI1{ status ="确定"; spidev@0{ SPI-max-frequency =<24000000>; reg =<0>; 兼容="Rohm、dh2228fv"; 状态="确定"; }; };
此更改后、出现器件节点/dev/spidev32766.0。 我修改了我的代码以打开此器件并尝试执行它。 结果是错误代码-22 EINVAL。 ioctl 返回无效参数错误。 我的代码中启动传输的部分如下所示:
struct spi_oco_transfer tr ={ .tx_buf =(unsigned long) tx、 .rx_buf =(unsigned long) rx、 .len = len、 .delay_usecs = 1、 .speed_Hz = 10000、 .bits_per_word = 8、 cs_change = 0、 }; ret = ioctl (fd、SPI_IOC_MESSAGE (1)、&tr);
其中 TX 是一个两字符长的缓冲区、len=2、rx=NULL、fd 是/dev/spidev32766.0.的文件描述符 在这种情况下、返回值为-1、并且 perror 显示"无效参数"。
我很难确定无效参数是什么、因为该代码在前一个系统中正常工作。 也令人困惑的是、为什么 Spidev 总线编号如此之高、而不是过去的"1"。
我们非常感谢您提供的任何见解。
Jeff