AM335X 新增 SPI 裝置(以新增 spi flash 為例)
阿新 • • 發佈:2019-01-30
由於 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
注意:這些都要選上
2. 在 arch/arm/mach-omap2/board-am335xevm.c 檔案裡新增 spi1的引腳配置
(注意 ,在myd-am335x上,spi1 的引腳跟McASP 的引腳複用,所以用 spi1 就不能使用 McASP)
12345678 | static struct 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 裝置及註冊函式
0102030405060708091011121314151617181920 | static struct spi_board_info am335x_spi1_slave_info[] ={ { .modalias = "spidev" , // 用來匹配 spidev 驅動 .max_speed_hz = 1000000, // 最大速率 .bus_num = 2, // 表示該裝置在 spi1 總線上 .chip_select =0, // 表示使用 spi1_cs0 }, }; static void spi_init( int evm_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 函式,如下所示
5. 重新編譯核心,並用該核心啟動開發板後,就可以在 /dev/ 目錄下看到 spidev2.0 裝置結點了 |