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.

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文件,但是我根本不会用。请告诉我一个升级设备树的方法,感谢

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

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

  • 感谢分享解决方法

  • 请告诉我一个升级设备树的方法

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

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

    2. 更新设备树源文件

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

    make dtbs

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

    5. 重启

  • 应该是在设备树配置好成为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