335x----spidev的添加

博主使用的是天嵌公司的335x_coreC。

内核版本linux3.2。

发现该源码没有基本SPI驱动,故在这里记录一下如何添加基本SPI。

1.使用make ARCH=arm menuconfig 进入配置单选中以下两项
       Device Drivers  --->
        [*] SPI support  --->
            <*>   McSPI driver for OMAP  
            <*>   User mode SPI device driver support

     选中以上两项后,那么就会编译drivers/spi/spidev.c文件,该文件的内容是注册一个spidev驱动。该驱动是一个字符设备驱动。

2.修改板级信息文件: arch/arm/mach-omap2/board-am335xevm.c

    (1)搜索“spi0_pin_mux”并在该结构体下面添加新管脚配置的结构体“spi1_pin_mux”(复制即可),如果存在则对比查看有没错误
     /* Module pin mux for SPI fash */
     static struct pinmux_config spi0_pin_mux[] = {
     ....
     };
     /* Module pin mux for SPI flash */
     static struct pinmux_config spi1_pin_mux[] = {
            {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                    | AM33XX_INPUT_EN},
            {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                    | AM33XX_PULL_UP | AM33XX_INPUT_EN},
            {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL
                    | AM33XX_INPUT_EN},
            {"rmii1_refclk.spi1_cs0", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL
                    | AM33XX_PULL_UP | AM33XX_INPUT_EN},
            {NULL, 0},

    }; 

    (2)搜索“spi0_init”并在该函数下面添加新的初始化函数“spi1_init”(复制即可),如果存在则对比查看有没错误
    /* setup spi0 */
    static void spi0_init(int evm_id, int profile)
    {
    ...
    }
 
    /* setup spi1 */
    static void spi1_init(int evm_id, int profile)
    {
            setup_pin_mux(spi1_pin_mux);
            spi_register_board_info(am335x_spi1_slave_info,
                            ARRAY_SIZE(am335x_spi1_slave_info));
            return;
    }

  (3)搜索“am335x_spi1_slave_info”从设备信息,并修改,如搜索不到则添加:
   static struct spi_board_info am335x_spi1_slave_info[] = {
        {
                .modalias      = "spidev",
                //.platform_data = &Acceleration_sensor,
                //.irq           = -1,
                //.mode            =SPI_MODE_0,
                //.max_speed_hz  = 120000,
                //.bus_num       = 2,
                //.chip_select   = 0,
                .max_speed_hz = 48000000,         //最大频率      
                .bus_num = 2,                           // 生成spidev2.0 ,也代表总线为2
                .chip_select = 0,                       // 表示使用spi1_cs0
                .mode = SPI_MODE_0,            //使用模式0
        },

};

        (4)搜索“embedsky_evm_dev_cfg”,注销或删除“spi0_init”,添加“spi1_init”:
        static struct evm_dev_cfg embedsky_evm_dev_cfg[] = {
            {enable_ehrpwm1A,DEV_ON_BASEBOARD, PROFILE_0 },
            {enable_ecap2,DEV_ON_BASEBOARD, PROFILE_0},
            {lcdc_init,     DEV_ON_BASEBOARD, PROFILE_0},
            {tsc_init,      DEV_ON_BASEBOARD, PROFILE_0},
            {i2c0_init,     DEV_ON_BASEBOARD, PROFILE_0},
            {i2c1_init, DEV_ON_BASEBOARD, PROFILE_0},
    #ifdef CONFIG_RTL8211
            {rgmii1_init,   DEV_ON_BASEBOARD, PROFILE_ALL},//网卡端口初始化
    #else
            {mii1_init,     DEV_ON_BASEBOARD, PROFILE_ALL},//网卡端口初始化
    #endif
            {usb0_init,     DEV_ON_BASEBOARD, PROFILE_ALL},
            {usb1_init,     DEV_ON_BASEBOARD, PROFILE_ALL},
            {evm_nand_init, DEV_ON_BASEBOARD,PROFILE_ALL},
            {mcasp1_init,   DEV_ON_BASEBOARD, PROFILE_0},//sound
            {mmc0_init,     DEV_ON_BASEBOARD, (PROFILE_ALL)},
            //{spi0_init,   DEV_ON_BASEBOARD, PROFILE_2},

            {spi1_init, DEV_ON_BASEBOARD, PROFILE_0},    


3.从新编译,并烧写进板子

4.验证:

        进入系统后     ls /dev/spidev*,后会出现spidev2.0设备

5.测试

        使用内核源码内的demo,Documentation/spi/spidev_test.c,交叉编译后,短接MOSI和MISO可以测试了

猜你喜欢

转载自blog.csdn.net/a617996505/article/details/80565544