TI中文支持网
TI专业的中文技术问题搜集分享网站

AM3352: 使用的linux3.2内核,内核版本过老,需要升级内核,但我找不到下载的内核的地方。或者告诉我一个实现spi从机的方法,尽管我之前提出过,得到的答案是linux不提供支持,但在百度的情况下表明是有人做出的,但是未分享。

Part Number:AM3352

我想要开发spi的从机模式,网上的案例都需要用到设备树,我尝试自己开发,但是很明显是不成功了,我想升级内核到5.0版本左右,然后再进行开发。我在3.2版本的内核中,linux-3.2.0-psp04.06.00.11/arch/arm/boot/dts找到了一些dts文件,但是我根本不会用。请告诉我一个升级设备树的方法,感谢

BobLu:

设备树只是一个配置文件,实际的程序逻辑还是在c里面,如果你已经有了驱动,那去掉设备树的支持,降级到3.x内核不是一个难得问题,如果不清楚可以发代码给AI问一下

,

?? ?:

感谢你的回复,我不知道slave模式怎么搞,我是这方面的新手,linux里面涉及到注册spi核心驱动,然后能够设置spi的从模式,但是我找不到,网上也没找到很好的资料。目前我不知道应该怎么实现,网上找到的资料是有设备树的,应该是在设备树配置好成为slave模式吧,我不太懂。

,

Gary Lu:

感谢分享解决方法

,

Gary Lu:

?? ? 说:请告诉我一个升级设备树的方法

为您提供一个一般的步骤:

1. 下载并编译新版本的内核

2. 更新设备树源文件

3. 重新编译设备树二进制文件: – 进入内核源代码目录。 – 使用以下命令编译设备树二进制文件:

make dtbs

4. 安装新内核和设备树文件

5. 重启

,

Gary Lu:

?? ? 说:应该是在设备树配置好成为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,但是我没找到。如果有,是在哪里?请帮助我

,

Gary Lu:

您好,

?? ? 说:那么是否可以在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

赞(0)
未经允许不得转载:TI中文支持网 » AM3352: 使用的linux3.2内核,内核版本过老,需要升级内核,但我找不到下载的内核的地方。或者告诉我一个实现spi从机的方法,尽管我之前提出过,得到的答案是linux不提供支持,但在百度的情况下表明是有人做出的,但是未分享。
分享到: 更多 (0)