hi,
最近在搞有关spi的驱动。请问有没有基于am335x具体的外接设备(如oled驱动)的spi驱动例程可借鉴一下呢?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
hi,
最近在搞有关spi的驱动。请问有没有基于am335x具体的外接设备(如oled驱动)的spi驱动例程可借鉴一下呢?
你要的是裸机的还是Linux的?裸机的话可以参考Starterware,Linux的话,我们的SDK中有提供。
参考这个:http://processors.wiki.ti.com/index.php/AM335x_McSPI_Driver%27s_Guide
顺带提一下:没有找到该节点的原因,可能是你使用的板子上面并没有SPI的相关设备,或者是profile的设置没挂SPI。如果是TI的EVM板的话,是要通过eeprom和profile的ID鉴别来配置相关的驱动的。如果鉴别出来的结果是没有SPI设备,就不会对其进行配置了。
首先谢谢你的回答。
我用的是自己做的板子,可能是上面没有相应的设备吧(有关eeprom的代码我已屏蔽掉)。
你给的链接之前我有看过,我现在要用spi驱动板子上的oled12864,除了在board-am335xevm.c 文件里要进行链接中那样的初始化配置外,
是不是还要写一个类似于m25p80.c一样的文件,我要通过spi对oled的寄存器进行读写操作,那么write()和read()函数是要自己编写,还是直接在内核中已经封装好,我直接调用就行了?
已解决!
static struct pinmux_config spi1_pin_mux[] = { {"mcasp0_aclkx.spi1_sclk", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN}, //spi's direction seems reverse from the reference. our test confirm that. {"mcasp0_fsx.spi1_d0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | AM33XX_INPUT_EN},#if 0 //this pin is used for gpio in oled. {"mcasp0_axr0.spi1_d1", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_INPUT_EN},#endif {"mcasp0_ahclkr.spi1_cs0", OMAP_MUX_MODE3 | AM33XX_PULL_ENBL | AM33XX_PULL_UP | AM33XX_INPUT_EN}, {NULL, 0},};static struct pinmux_config gpio_Oled_mux[] = { {"mcasp0_aclkr.gpio3_18",OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},//OLED power enable {"mcasp0_ahclkx.gpio3_21", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT},//OLED RST {"mcasp0_axr0.gpio3_16", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, //OLED D/C {NULL, 0},};static struct spi_board_info oled_spi1_slave_info[] = { { .modalias = "oled", .platform_data = (const void *)GPIO_TO_PIN(3, 16), .irq = -1, .max_speed_hz = 12000000, .bus_num = 2, .chip_select = 0, .mode = SPI_MODE_0, },};static void spi1_init(int evm_id, int profile){ setup_pin_mux(spi1_pin_mux); spi_register_board_info(oled_spi1_slave_info, ARRAY_SIZE(oled_spi1_slave_info)); return;}static struct evm_dev_cfg evm_sk_dev_cfg[] = { ... //{mcasp1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {spi1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, //注意这里的第二个参数 ... {NULL, 0, 0},};static struct evm_dev_cfg evm_sk_dev_cfg[] = { ... //{mcasp1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, {spi1_init, DEV_ON_BASEBOARD, PROFILE_ALL}, //注意这里的第二个参数 ... {NULL, 0, 0},}; 结果就可以了。