- 论坛徽章:
- 1
|
回复 1# frank529
急用先学,最近刚好看了这一部分:
1、上述做法需要在注册spi控制器驱动即spi master前,先要定义好spi_board_info结构并注册。但是如果我要编写一个驱动模块,我应该怎样注册spi_device?
spi_device就是就是通过 spi_register_board_info 来注册的。
通过spi_board_info结构,给定设备的下面信息:
设备名
波特率
设备挂在哪个spi总线上,如powerpc 5000有SPI A, B, C ,D
片选信号
#define SPI_AK4104 \
659{ \
660 .modalias = "ak4104-codec", \设备名
661 .max_speed_hz = 10000, \波特率
662 .bus_num = 0, \SPI A, B, C ,D
663 .chip_select = 0, \片选(0~7)
664 .controller_data = (void *) GPIO_SPDIF_CS,\平台数据
665}
#define SPI_DAC7512 \
679{ \
680 .modalias = "dac7512", \设备名
681 .max_speed_hz = 1000000, \波特率
682 .bus_num = 0, \ SPI A, B, C ,D
683 .chip_select = 2, \片选(0~7)
684 .controller_data = (void *) GPIO_MCLK_DAC_CS, \
685}
static struct spi_board_info connector_spi_devices[] __initdata = {
SPI_AK4104,
SPI_DAC7512,
};
调用下面函数,就把上面两个设备登记到/sys/bus/spi下了
spi_register_board_info(ARRAY_AND_SIZE(connector_spi_devices));
2、spi控制器是通过片选信号来区分多个spi设备的,这个片选信号是像I2C地址一样由设备定义好的吗?如何知道某个设备该用怎样的片选信号?
硬件连线决定的。
上面的例子,spi bus A上挂了上面两个设备:AK4104/DAC7512
SPI接口有下列信号线:
SCK_A: 时钟,同两个设备的时钟信号接在一起
SIN_A: data in; 同两个设备的data out信号接在一起
SOUT_A data out; 同两个设备的data in信号接在一起
PCS0_A: bus A chip select 0, 接AK4104的片选
PCS2_A: : bus A chip select 2,接DAC7512的片选
如果先选中chip select 0, 下面的操作就会作用于设备AK4104
如果先选中chip select 2, 下面的操作就会作用于设备DAC7512
|
|