设为首页收藏本站
查看: 16214|回复: 1

AM335X 添加 SPI 设备(以添加 spi flash 为例)

[复制链接]

5

主题

13

回帖

1028

积分

版主

积分
1028
jakebo 发表于 2015-1-5 11:34:45 | 显示全部楼层 |阅读模式
由于 spi 设备经常用到,而在 myd-am335x 的开发板上没有 spi 设备,所以内核里也没有 spi 设备的注册信息,对内核不熟悉的童鞋想要添加自己的 spi 设备时可能会感觉无从下手

折腾了一下下,在myd-am335x的 spi1 上添加了一个 spi 的设备,但由于 myd-am335x 上没有 spi 设备, 所以没有验证是否可行,但至少在 /dev/ 目录下有 spidev2.0 出来了,说明 spi 设备已经注册成功,接下来就是调试的事了

步骤如下


1. 首先想要用 spidev,就得把 spidev 加载到内核里,在Linux内核源码的根目录下运行:
    [mw_shl_code=bash,true]make ARCH=arm menuconfig[/mw_shl_code]
    依次选择
Device Drivers  --->
     SPI support  --->
           <*>   McSPI driver for OMAP
           <*>   User mode SPI device driver support


   
   注意:这些都要选上
   
2. 在 arch/arm/mach-omap2/board-am335xevm.c 文件里添加 spi1 的引脚配置
  (注意 ,在myd-am335x上,spi1 的引脚跟 McASP 的引脚复用,所以用 spi1 就不能使用 McASP)
    [mw_shl_code=c,true]/* Module pin for SPI, JBO */
static struct pinmux_config spi_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},
    {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | AM33XX_INPUT_EN},
    {NULL, 0},
};[/mw_shl_code]

3. 添加 spi 设备及注册函数
    [mw_shl_code=c,true]/* Spi slave device, JBO */
static struct spi_board_info am335x_spi1_slave_info[] = {
    {
        .modalias      = "spidev", // 用来匹配 spidev 驱动
        .max_speed_hz  = 1000000, // 最大速率
        .bus_num       = 2, // 表示该设备在 spi1 总线上
        .chip_select   = 0, // 表示使用 spi1_cs0
    },
};

/* Setup SPI, JBO */
static void spi_init(int evm_id, int profile)
{
    /* Configure SPI */
    setup_pin_mux(spi_pin_mux);
    spi_register_board_info(am335x_spi1_slave_info,
                            ARRAY_SIZE(am335x_spi1_slave_info));

    return;
}
[/mw_shl_code]

4. 在设备初始化列表里添加该函数的调用,和注释掉 McASP 函数,如下所示
    [mw_shl_code=c,true]static struct evm_dev_cfg myd_am335x_dev_cfg[] = {
    // ..............
    //{mcasp0_init,   DEV_ON_BASEBOARD, PROFILE_ALL},                                                                                
    {spi_init,      DEV_ON_BASEBOARD, PROFILE_ALL},
    // ..............
    {NULL, 0, 0},
};[/mw_shl_code]

5. 重新编译内核,并用该内核启动开发板后,就可以在 /dev/ 目录下看到 spidev2.0 设备结点了
   
11:52:11.png
回复

使用道具 举报

231

主题

64

回帖

2145

积分

管理员

积分
2145
玉米糊 发表于 2015-1-5 13:52:02 | 显示全部楼层
要自己做还真是麻烦,官方的就是好,赞一个!!:victory:
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-5-22 01:12 , Processed in 0.045451 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表