前言
@和原子哥一起学习Linux
开发环境:I.MX6Ull开发板
参考内容:正点原子的驱动开发教程,并完成linux移植部分(或使用出厂版),使用自己移植的代码。
参考书籍:《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.6.pdf》
发现的问题
《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.6.pdf》的62.5.2的spi驱动中,缺少了对spi片选引脚的操作
1、在初始化中,获取片选脚
int ret;
/* 获取设备树中cs片选信号 */
chr_dev_t.nd = of_find_node_by_path("/soc/aips-bus@02000000/spba-bus@02000000/ecspi@02010000");
if(chr_dev_t.nd == NULL) {
printk("ecspi3 node not find!\r\n");
return -EINVAL;
}
/* 2、 获取设备树中的gpio属性 */
chr_dev_t.cs_gpio = of_get_named_gpio(chr_dev_t.nd, "cs-gpio", 0);
if(chr_dev_t.cs_gpio < 0) {
printk("can't get cs-gpio");
return -EINVAL;
}
/* 3、设置GPIO为输出,并且输出高电平 */
ret = gpio_direction_output(chr_dev_t.cs_gpio, 1);
if(ret < 0) {
printk("can't set gpio!\r\n");
}
2、在读取和写入时获取和释放片选
gpio_set_value(dev->cs_gpio, 0);
。。。
gpio_set_value(dev->cs_gpio, 1);
效果验证: