linux 在 Imx6 上读取 SPI 寄存器时挂起

linux hangs when reading SPI registers on Imx6

我有一个嵌入式项目 linux 在 NXP 的 Imx6 SoC 上运行,我正在尝试使用它的 SPI。由于没有同时支持master和slave模式的驱动,我先尝试从用户那里自己处理space。我使用 mmap 访问 SPI 的寄存器,但是当我尝试使用 mmap read/write 它们时,系统挂起并且我必须重新启动。然后我在自定义 spi-imx 驱动程序中做了同样的事情,但我必须等待驱动程序到达函数 spi_imx_transfer 才能被允许访问寄存器。

我对linux设备管理还很陌生,所以想知道为什么用同样的方法我可以访问其他设备的寄存器但不能访问SPI的寄存器。 为什么当我尝试读取这些寄存器时 linux 挂起? 是否可以在我的设备驱动程序中从用户 space 或更早版本读取或写入它们?

是否有允许(或解锁?)访问寄存器的方法?

欢迎任何建议。

这不是 linux 问题:ECSPI 时钟被禁用。所以,我只需要在访问 SPI 的寄存器之前将正确的寄存器设置为 1(使用 mmap)。