君正x1000平台SPI接口使用
0 条评论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.c1
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管脚
};
#endifSPI驱动相关文件
1
2
3
4
5
6kernel/drivers/spi/
├── jz_spi.c
├── jz_spi.h
├── spi-bitbang.c
├── spi.c
├── spidev.c内核编译配置
1
2cd 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通信。