1. 程式人生 > >AM335X 新增 SPI 裝置(以新增 spi flash 為例)

AM335X 新增 SPI 裝置(以新增 spi flash 為例)

由於 spi 裝置經常用到,而在 myd-am335x 的開發板上沒有 spi 裝置,所以核心裡也沒有 spi裝置的註冊資訊,對核心不熟悉的童鞋想要新增自己的 spi 裝置時可能會感覺無從下手

折騰了一下下,在myd-am335x的 spi1 上添加了一個 spi 的裝置,但由於 myd-am335x 上沒有 spi 裝置,所以沒有驗證是否可行,但至少在 /dev/ 目錄下有 spidev2.0 出來了,說明 spi裝置已經註冊成功,接下來就是除錯的事了

步驟如下


1. 首先想要用 spidev,就得把 spidev 載入到核心裡,在Linux核心原始碼的根目錄下執行:

make ARCH=arm menuconfig

    依次選擇Device Drivers --->         SPI support--->                <*>McSPI driver for OMAP                <*>User mode SPI device driver support
   注意:這些都要選上
   
2. 在 arch/arm/mach-omap2/board-am335xevm.c 檔案裡新增 spi1的引腳配置
  (注意 ,在myd-am335x上,spi1 的引腳跟McASP 的引腳複用,所以用 spi1 就不能使用 McASP)
12345678staticstruct pinmux_config spi_pin_mux[] = {{"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_INPUT_EN },{"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_PULL_UP | AM33XX_INPUT_EN},{"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_INPUT_EN},{"mcasp0_ahclkr.spi1_cs0"
, OMAP_MUX_MODE3 | AM33XX_PULL_ENBL |AM33XX_PULL_UP | AM33XX_INPUT_EN},{NULL, 0},};


3. 新增 spi 裝置及註冊函式
   
0102030405060708091011121314151617181920staticstruct spi_board_info am335x_spi1_slave_info[] ={{.modalias     ="spidev",// 用來匹配 spidev 驅動.max_speed_hz  = 1000000,// 最大速率.bus_num      = 2, // 表示該裝置在 spi1 總線上.chip_select   =0, // 表示使用 spi1_cs0},};staticvoid spi_init(intevm_id, int profile){setup_pin_mux(spi_pin_mux);spi_register_board_info(am335x_spi1_slave_info,ARRAY_SIZE(am335x_spi1_slave_info));return;}


4. 在裝置初始化列表裡新增該函式的呼叫,和註釋掉 McASP 函式,如下所示
 
 
1234567staticstruct evm_dev_cfg myd_am335x_dev_cfg[] = {// ..............//{mcasp0_init,  DEV_ON_BASEBOARD,PROFILE_ALL},                                                                               {spi_init,     DEV_ON_BASEBOARD, PROFILE_ALL},// ..............{NULL, 0, 0},};


5. 重新編譯核心,並用該核心啟動開發板後,就可以在 /dev/ 目錄下看到 spidev2.0 裝置結點了
  
11:52:11.png