我想要开发spi的从机模式,网上的案例都需要用到设备树,我尝试自己开发,但是很明显是不成功了,我想升级内核到5.0版本左右,然后再进行开发。我在3.2版本的内核中,linux-3.2.0-psp04.06.00.11/arch/arm/boot/dts找到了一些dts文件,但是我根本不会用。请告诉我一个升级设备树的方法,感谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我想要开发spi的从机模式,网上的案例都需要用到设备树,我尝试自己开发,但是很明显是不成功了,我想升级内核到5.0版本左右,然后再进行开发。我在3.2版本的内核中,linux-3.2.0-psp04.06.00.11/arch/arm/boot/dts找到了一些dts文件,但是我根本不会用。请告诉我一个升级设备树的方法,感谢
应该是在设备树配置好成为slave模式吧
1. 设备树配置
&spi1 { status = "okay"; spidev@0 { compatible = "spidev"; reg = <0>; mode = <0>; // 0 表示SPI从机模式 // 。。。 }; };
2. SPI核心驱动注册:
#include <linux/spi/spi.h> static struct spi_board_info my_spi_board_info = { .modalias = "spidev", .max_speed_hz = 500000, .bus_num = 1, .chip_select = 0, .mode = SPI_MODE_0, // 0 表示SPI从机模式 }; static struct spi_device *my_spi_device; static int __init my_spi_init(void) { my_spi_device = spi_new_device(spi_bus, &my_spi_board_info); // 其他初始化... return 0; } static void __exit my_spi_exit(void) { spi_unregister_device(my_spi_device); } module_init(my_spi_init); module_exit(my_spi_exit); MODULE_LICENSE("GPL");
3. 编译和加载模块
首先,非常感谢你的回复。
设备树的配置方案是我找到的网络上较为通用方案。
&spi1 {
status = "okay";
spidev@0 {
compatible = "spidev";
reg = <0>;
mode = <0>; // 0 表示SPI从机模式
// 。。。
};
};
中的mode = <0>; // 0 表示SPI从机模式。
但是在linux3.2的内核中,没有设备树,我也未找到相关的关于这个配置。
而在SPI核心驱动注册中,my_spi_board_info里面我无论注册成SPI_MODE_0,SPI_MODE_1(我一直以为是spi的四种模式,是错的吗?),都是spi0_do这个拐角发送的消息。我用spi_sync这个函数直接执行,然后在硬件上用示波器检测出来的。那么是否可以在3.2内核中直接配置spi的slave模式?
另一方面,内核移植的话,内核下载在哪里,我直接去下载linnux官方的?ti应该是由提供不同内核版本的sdk,但是我没找到。如果有,是在哪里?请帮助我
您好,
那么是否可以在3.2内核中直接配置spi的slave模式?
为您提供一个SPI配置示例:
static struct spi_board_info my_spi_board_info = { .modalias = "spidev", .max_speed_hz = 500000, // 速率 .bus_num = 1, .chip_select = 0, .mode = SPI_MODE_0, // 或者 SPI_MODE_1 }; static struct spi_device *my_spi_device; static int __init my_spi_init(void) { my_spi_device = spi_new_device(spi_bus, &my_spi_board_info); // ... return 0; } static void __exit my_spi_exit(void) { spi_unregister_device(my_spi_device); } module_init(my_spi_init); module_exit(my_spi_exit); MODULE_LICENSE("GPL");
`my_spi_board_info`结构中的`mode`字段设置为`SPI_MODE_0`,你也可以尝试用MODE1
Thanks,
Gary