請教linux的SPI驅動問題


http://bbs.chinaunix.net/thread-3691765-1-1.html

 

內核版本2.6.30。編進內核的SPI驅動,通過看代碼我明白了,大致過程是這樣:
1、先創建一個spi_board_info結構描述spi設備信息,調用spi_register_board_info將這個結構添加到board_list中。
2、然后調用spi_register_master注冊SPI控制器驅動,此時會調用scan_boardinfo掃描board_list,根據 spi_board_info調用spi_new_device生成spi_device結構,用spi_add_device添加設備。
3、調用spi_register_driver注冊spi_driver,通過與device匹配驅動設備。

下面是問題:
1、上述做法需要在注冊spi控制器驅動即spi master前,先要定義好spi_board_info結構並注冊。但是如果我要編寫一個驅動模塊,我應該怎樣注冊spi_device?
2、spi控制器是通過片選信號來區分多個spi設備的,這個片選信號是像I2C地址一樣由設備定義好的嗎?如何知道某個設備該用怎樣的片選信號?

 

 

 

回復 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM