Продолжаю разбираться с SPI на BeagleBoard xM.
Удалось собрать такое ядро, чтобы были видны /dev/spidev3.0, /dev/spidev3.1, /dev/spidev4.0
Но при запуске программы тестирования spi_test осциллограф ничего на ножках не видит.
Из чего я делаю вывод, что выводы настроены не верно, не подключены к SPI.
Нашел много рецептов по настройке MUX. Все совсем разные. Выбрал пока такой, который действует в ядре 2.6.32, которое я использую. Описан этот способ тут http://elinux.org/BeagleBoardPinMux#Recent_Kernels
Вот какой у меня получается код в соответствии с этими инстркциями
Код
#ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = {
OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI3 CS0
OMAP3_MUX(MCBSP1_DX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI4 SIMO (MOSI)
OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI3 CS1
OMAP3_MUX(MCBSP1_FSX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI4 CS0
OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI3 SOMI (MISO)
OMAP3_MUX(MCBSP1_DR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI4 SOMI (MISO)
OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI3 SIMO (MOSI)
OMAP3_MUX(MCBSP1_CLKR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI4 CLK
OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI3 CLK
{ .reg_offset = OMAP_MUX_TERMINATOR },
};
#else
#define board_mux NULL
#endif
static struct omap_board_mux board_mux[] __initdata = {
OMAP3_MUX(SDMMC2_DAT3, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI3 CS0
OMAP3_MUX(MCBSP1_DX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI4 SIMO (MOSI)
OMAP3_MUX(SDMMC2_DAT2, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI3 CS1
OMAP3_MUX(MCBSP1_FSX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI4 CS0
OMAP3_MUX(SDMMC2_DAT0, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI3 SOMI (MISO)
OMAP3_MUX(MCBSP1_DR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI4 SOMI (MISO)
OMAP3_MUX(SDMMC2_CMD, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT), // SPI3 SIMO (MOSI)
OMAP3_MUX(MCBSP1_CLKR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI4 CLK
OMAP3_MUX(SDMMC2_CLK, OMAP_MUX_MODE1 | OMAP_PIN_INPUT), // SPI3 CLK
{ .reg_offset = OMAP_MUX_TERMINATOR },
};
#else
#define board_mux NULL
#endif
Далее необходимо в конфигурации ядра прописать
CONFIG_OMAP_MUX=y
Пересобираю ядро. Вставляю флешку в BeagleBoead xM, и он отказывается грузиться. Симптомы- зависает. На экране появляется пингвинчик, однако ни одной строки не появляются и висит.
Опытным путем проверено, что зависает именно при включенном CONFIG_OMAP_MUX=y. Если эту строку убрать, то грузится опять без проблем.
Вопрос- в чем может быть проблема? Почему с включенным мультиплексором он не грузится? Как включить MUX и настроить его на SPI