И это всё МОЁ
Всем привет, пытаюсь из своего модуля заставить работать spi интерфейс для взаимодействия с устройством на шине с cs0.
И при попытке обмена получаю дамп.
Но дамп вываливается не всегда.
Иногда обмен проходит.
Как я инициализирую устройство.
Добавил описание в DTS (соответсвенно скомпилировал и указал при загрузке)
&spi1 {
num-cs = <1>;
cs-gpios = <&gpioa 25 0>;
status = "okay";
mptiospi: spi@0{
compatible = "epm3128";
spi-max-frequency = <100000>;
reg=<0>;
};
};
После загрузки устройство успешно отображается на sys_fs
# ls /sys/class/spi_master/spi1/
device power statistics uevent
of_node spi1.0 subsystem
В модуле ядра следующий код.
...
static struct spi_device * epm3128_spi_dev;
extern struct bus_type spi_bus_type;
...
void
my_spi_init(void)
{
struct spi_master *spi_1;
struct spi_message m;
struct spi_transfer xfer = {
.tx_buf = &spi_tx_buf,
.rx_buf = &spi_rx_buf,
.len = 2,
.bits_per_word = 16,
};
epm3128_spi_dev = bus_find_device_by_name(&spi_bus_type,spi_1,"spi1.0"
;
if(epm3128_spi_dev) {
spi_tx_buf = 0xaaaa;
spi_rx_buf = 0;
spi_setup(epm3128_spi_dev);
spi_message_init_with_transfers(&m,&xfer,1);
spi_async(epm3128_spi_dev,&m)
}
}
Есть идеи, что я мог упустить?
( дамп )