君正X1000平台内核SPI接口使用

一.  平台环境与源码编译

1. 平台环境

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

2.  源码编译:

参照《v1000_v8.2版本编译_20181116》,可整体进行编译(即同时编译生成x.bin,kernel镜像文件,文件系统镜像文件),也可单独对每个工程进行编译;

二.  X1000内核SPI配置

需要注意的是,该开发板中由于 SFC 模块被用于 spi nor flash,已被占用,所以改用 SSI0 接口复用为标准 SPI 接口。

1.   配置 spi_board_info 和 spi_info

涉及源码文件为:arch/mips/xburst/soc-x1000/chip-x1000/halley2/common/spi_bus.c

//注:如果有多个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

找到以上的函数配置接口,按照上述的参数进行配置即可。

2. SPI设备驱动配置 

SPI驱动相关的源码文件如下:

kernel/drivers/spi/
├── jz_spi.c
├── jz_spi.h
├── spi-bitbang.c
├── spi.c
├── spidev.c

SPI设备驱动配置 

进入内核源码目录,即终端输入如下命令:

cd ingenic-linux-kernel3.10.14-x1000-v8.2-20181116

如下对内核进行配置(这里配置操作需要 root 管理员权限):

 sudo make menuconfig

出现内核界面选项。进入 Device Drivers->SPI support选项,这里SPI support 选择保证是选中打开的模式。如下所示:

选中如下选项:

和如下选项

按照上述的配置,选中相关的配置之后,一定要选中下面的 < save >选项进行配置的保存!!!

最后对内核进行编译,重新生成内核镜像,烧录设备中。

网上有网友提到:“另外测试发现 SSI0_DR 管脚被摄像头占用,需要屏蔽掉摄像头相关驱动。”

即进入菜单 Device Drivers -> Multimedia support -> Sensors used on soc_camera driver

我自己这里因为会用到摄像头采图功能,所以,去掉摄像头驱动,编译成的X1000内核 uImage文件,烧录开发板导致系统一直重启,所以,我没有屏蔽掉摄像头驱动。

经过上面一轮内核配置,通过调试串口查看,/dev下的 SPI 设备结点还是存在问题。

4.  硬件原理图排查

查看了一下硬件IO口使用情况,如下核心板SPI电路图:

与如下底板的电路图进行对比,数据手册的IO说明 SPI 的硬件IO口存在复用问题:

结合上述电路图与 X1000数据手册,可知 SPI 与 IIC 口公用,都连接 EEPROM。即开发板提供了一个两种接口方式(SPI与IIC通信方式的)EEPROM存储器。因此,考虑内核关闭 IIC 通信方式的EEPROM。

解决办法:内核关闭 IIC 通信的EEPROM 功能。

如下所示:配置内核,即终端输入 sudo make menuconfig 命令。

进入内核选项 Device Drivers->Misc devices->EEPROM support 选项。

取消掉上图箭头所指的 I2C EEPROMs 选项,并选中下面 < Save > 进行保存。

最后对内核进行编译,重新生成内核镜像,烧录设备中。

4.  测试 SPI 接口

SPI接口测试如下:

首先,通过调试串口,可查看开发板文件系统/dev目录下,是否有spi设备节点存在;

然后可写 SPI 应用程序,对SPI通信进行测试;

经过测试,SPI 通信正常。

总结:

在内核代码中关于SPI 驱动代码部分,例如设备注册等操作函数还需要编译进内核中,这样在/dev目录下才会生成 SPI 设备结点,以供应用程序使用。

关于SPI 驱动代码注册进内核的部分,以后文章进行详细的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值