我想要开发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