Allwinner SPI 驱动的使用和调试方法

常见问题5.1【现象】:启动过程中 SPI 总线驱动有错误信息提示:sunxi_spi_request_gpio()1238 - SPI0 pinctrl_lookup_state() failed! return ffffffedsunxi_spi_hw_init()1336 - [spi-0] Request GPIO failed!【原因分析】:

1)首先确认 pinctrl 模块的初始化是否成功;

2)然后,再核对 sys_config.fex 中 SPI 控制器的 GPIO 配置是否正确,可以参考 SOC 的 pinmultiplex 文档。IO 口有复用的情况需要与硬件确认。

5.2【现象】:SPI 设备驱动的 probe 函数没有执行【原因分析】:确认下面几点:

1) SPI 总线驱动的初始化是否成功,在内核启动信息中搜索关键字“sunxi_ spi_init”;

2) SPI 设备驱动的 init 函数是否执行;

3) probe 函数是否注册到 spi_driver 结构中;

4) sys_config.fex 中的 SPI 控制器是否使能;

5) sys_config.fex 中的 spi_devices 是否正确配置,其中的 bus_num 很重要,需要和硬件核对后正确填写;chip_select 不能超过所属 SPI 控制器的片选总数;

6) sys_config.fex,sys_board 中的 modalias 是否和 SPI 设备驱动中的设备 ID 信息一致。

5.3【现象】:大数据量传输时出错【原因分析】:SPI 总线驱动中考虑 FIFO 的大小,如果一次传输数据大于 64 就会启用 DMA来搬运数据。可以调整数据的读写粒度,使其小于等于 64,查看是否能够成功读写,这样能够排除 DMA 的潜在原因。

5.4【现象】:只有少量数据量正常【原因分析】:有可能是模组与主控的时序要求不一致,可以尝试调整 CLK 频率进行通信。

调试方法SPI 总线驱动通过 sysfs 节点提供了几个在线调试接口:

6.1 /sys/module/spi_sunxi/parameters/debug_mask此节点文件的功能是打开调试信息。缺省值是 1,只会打印出错的提示信息(如果是 0,出错信息也不会打印 )。

打开调试信息的方法:echo 3 > /sys/module/spi_sunxi/parameters/gs_debug_mask关闭调试信息的方法:

echo 1 > /sys/module/spi_sunxi/parameters/gs_debug_mask

6.2 /sys/devices/platform/spi.0/info此节点文件可以打印出当前 SPI 通道的一些硬件资源信息。

6.3 /sys/devices/platform/spi.0/status此节点文件可以打印出当前 SPI 通道的一些运行状态信息,包括控制器的各寄存器值。

你可能感兴趣的:(linux,设备驱动之SPI总线)