你好。
我想使用 QSPI 作为标准的4线 SPI、以便在全双工模式下使用 Linux spidev 驱动程序与 TLE9255W CAN 总线收发器进行通信。 我已按照以下方式修改了 dra76-EVM-infodas.dts:
&qspi {
status = "okay";
reg = <0x4b300000 0x100>,
<0x5c000000 0x4000000>,
<0x4a002558 0x4>;
spi-max-frequency = <100000>;
reg-names = "qspi_base", "qspi_mmap", "qspi_ctrlmod";
/delete-node/ m25p80@0;
spidev@0x00 {
compatible = "rohm,dh2228fv";
reg = <0>;
status = "okay";
spi-max-frequency = <100000>;
spi-cpha;
};
};
因此、当我加载了 spidev 模块时、我会使/dev/spidev32766.0器件能够正常工作。
当我运行 spidev_test 应用程序(从 Linux 内核源编译)时、我遇到 EINVAL 错误、因为该应用程序尝试在全双工模式下使用/dev/spidev32766.0、但其探测器函数中的 ti-QSPI 驱动程序会按如下方式进行编码:
master->flags = SPI_MASTER_HALF_DUPLEX;
即使我已经注释掉了这一行--代码中还有另外一个位置:
static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t,
int count)
{
int ret;
if (t->tx_buf) {
ret = qspi_write_msg(qspi, t, count);
if (ret) {
dev_dbg(qspi->dev, "Error while writing\n");
return ret;
}
}
if (t->rx_buf) {
ret = qspi_read_msg(qspi, t, count);
if (ret) {
dev_dbg(qspi->dev, "Error while reading\n");
return ret;
}
}
return 0;
}
在 SPI 总线上、我有两个事务:

因为 CAN 总线收发器只能在全双工模式下工作、所以我无法得到答案。
因此、我有两个关于这一切的问题:
1) 1) QSPI 控制器中是否存在使用全双工的硬件限制?
2) 2)如果没有硬件限制--如何为 QSPI 启用全双工模式?
