-1. 补充
这是后来补充的,适配之后发现IMX6ULL硬件上不支持 3Wire 9Bits方式,但是我适配这个程序的目的就是用9bits做驱动的。所以只能用软件方式了。参考下面这篇:
[Linux][驱动][设备树] IMX6ULL修改设备树+模拟3Wire 9Bits I型实现ST7701S RGB屏幕初始化
0. 硬件介绍
开发板:韦东山100ask IMX6ULL MINI
RGB屏幕:某宝ST7701S + GT911 480*480 RGB666屏幕
1. 适配spidev
1.0 配置.config
两种方式 可以使用make menuconfig,也可以直接改配置文件,这里我选择后者
修改这个即可,修改内容为
CONFIG_SPI=y
CONFIG_SPI_GPIO=y
CONFIG_SPI_IMX=y
CONFIG_SPI_SPIDEV=y
1.1 修改设备树
进入官方提供的内核文件夹,找到设备树文件
我们使用的是板子上的拓展口,此拓展口对应ecspi1控制器,就是韦东山板子的22Pin那个拓展口
可以看到ecspi1的pinctrl子系统厂商已经给我们配置好了,我们只需要写client就可以了
我们找到这部分代码
添加我们自己的设备树
909 spi_dev_vernon_st7701s:spi_vernon@0 {
910 compatible = "vernon, st7701s"; #要和driver匹配的compatible,非常重要
911 reg = <0>; #选择时cs-gpios的第一个还是第二个
912 spi-max-frequency = <5000000>; # 频率
913 };
1.2 修改spidev.c
取到内核的驱动目录下
然后编辑spidev.c
在原来的基础上加上自己刚才在设备树新建的节点,名字要对应上,就是之前说的很重要的那行compatible
696 static const struct of_device_id spidev_dt_ids[] = {
697 { .compatible = "rohm,dh2228fv" },
698 { .compatible = "lineartechnology,ltc2488" },
699 { .compatible = "vernon, st7701s" }, //这行是新加的
700 {},
701 };
1.3 编译内核
因为修改了内核文件,所以我们需要重新编译内核
首先回到内核目录,之后执行make zImage -j4
然后我们使用adb push到开发板上去
1.4 编译设备树
因为我们修改了设备树,因此需要重新编译设备树
在内核目录执行make dtbs
之后adb push到开发板上去
在开发板上,把这俩文件都放在开发板的boot目录下,之后重启(reboot)
2. 测试spidev
spidev内核提供了其测试文件
我们先查看我们的设备号,如果有设备号,说明上面的适配成功了
执行命令ls /dev/ | grep "spi*"
可以看到设备号,每个人都有可能不一样
之后首先找到测试文件
修改测试程序中的设备号
之后make
将开发板的MISO和MOSI短接,就是图中黄色的那个线
然后我们把应用程序adb push 推到板子上
如果你执行之后是这样的,那说明成功了, 没成功下面的数字全是00