0x00 平台环境

  • 开发板 X1000_HALLEY2_BASEBOARD_V4.1
  • 源码版本 ingenic-linux-kernel3.10.14-x1000-v8.2-20181116

0x01 源码编译

参照官方文档《Manhattan_platform 编译系统使用指南》,进行一次完整编译。

0x02 SPI配置

参考官方文档《X1000软件开发手册V4.2》中的SPI模块章节进行一步一步配置。
需要注意的是,该开发板中由于SFC模块被用于spi nor flash,已被占用,所以改用SSI0接口复用为标准SPI接口。

  • 配置spi_board_info和spi_info
    文件arch/mips/xburst/soc-x1000/chip-x1000/halley2/common/spi_bus.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #if defined(CONFIG_JZ_SPI0) || defined(CONFIG_SPI_GPIO)
    //注:如果有多个SPI接口可以对该数组进行扩展
    struct spi_board_info jz_spi0_board_info[] = {
    [0] = {
    .modalias = "spidev", //设备名称,与驱动名称相匹配
    .platform_data = NULL, //device private data
    .max_speed_hz = 50000000, //设置总线最大支持频率
    .bus_num = 0, //bus num
    .chip_select = 0, //chip select
    .mode = 0,
    }

    };
    int jz_spi0_devs_size = ARRAY_SIZE(jz_spi0_board_info);
    #endif

    #ifdef CONFIG_JZ_SPI0
    struct jz_spi_info spi0_info_cfg = {
    .chnl = 0,
    .bus_num = 0,
    .max_clk = 54000000,//SPI支持的最大时钟
    .num_chipselect = 1,//支持的芯片片选数,根据需要配置
    .allow_cs_same = 1,
    .chipselect = {GPIO_PD(1),GPIO_PD(1)},//片选引脚定义,这里是有PD1管脚
    };
    #endif
  • SPI驱动相关文件

    1
    2
    3
    4
    5
    6
    kernel/drivers/spi/
    ├── jz_spi.c
    ├── jz_spi.h
    ├── spi-bitbang.c
    ├── spi.c
    ├── spidev.c
  • 内核编译配置

    1
    2
    $ cd kernel
    $ make menuconfig

进入菜单Device Drivers -> SPI support (SPI [=y])


另外测试发现SSI0_DR管脚被摄像头占用,需要屏蔽掉摄像头相关驱动
进入菜单Device Drivers -> Multimedia support -> Sensors used on soc_camera driver

0x03 测试SPI接口

在packages/example/Sample/spi目录下,官方意见提供spi的demo,根据需要自行修改,最后连接SPI从设备测试SPI通信。