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

标签 c linux mmap spi imx6

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

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

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

欢迎任何建议。

最佳答案

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

关于c - 在 Imx6 上读取 SPI 寄存器时 linux 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157056/

相关文章:

c - 输出有何不同?

linux - find 命令适用于提示,而不是 bash 脚本 - 通过变量传递多个参数

android - Appium ERROR 转储失败,因为无法加载 Assets : Invalid file Support

c - 使用 mmap() 如何创建动态大小的结构

我可以 mmap 长度大于文件大小的文件吗?

c++ - 在文件中存储大量由定界符分隔的整数键值对的最有效方法

c - 检测两个数相加时是否发生无符号整数溢出

android - NDK 使用什么标志来发布 lib

c - 旋转矩形内的几个点

linux - BASH: 发送 SIGTSTP 信号 (ctrl+z)