aaarrr 69 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба 58 minutes ago, jenya7 said: param_spidev_spi_bus=0 Вот не уверен, что это правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 (изменено) · Жалоба On 9/20/2022 at 9:37 AM, aaarrr said: Вот не уверен, что это правильно. попробовал param_spidev_spi_bus=1 то же самое. пишут что надо =0 Изменено 20 сентября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба 37 minutes ago, jenya7 said: пишут что надо =0 Мало ли, что пишут. Разбираться - проверить содержимое оверлея, сопоставить со схемой и т.д. И лучше без "либ", spidev можно замечательно окучить напрямую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 (изменено) · Жалоба On 9/20/2022 at 10:33 AM, aaarrr said: Мало ли, что пишут. Разбираться - проверить содержимое оверлея, сопоставить со схемой и т.д. а как проверить содержимое? On 9/20/2022 at 10:33 AM, aaarrr said: И лучше без "либ", spidev можно замечательно окучить напрямую. без либ static const char *device = "/dev/spidev0.0"; int SPI_Setup(int speed) { int ret = 0; int fd; fd = open(device, O_RDWR); if (fd < 0) printf("can't open device\n"); ret = ioctl(fd, SPI_IOC_WR_MODE, 0); if (ret == -1) printf("can't set spi mode"); ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD,8); if (ret == -1) printf("can't set bits per word"); ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed); if (ret == -1) printf("can't set max speed hz"); return fd; } fd получает какие то странные дескрипторы (18, 28) и ret возвращает -1. я добавил status в трансфер void IO_BOARD_Xfer(int spi_handle, char *tx_buf, char *rx_buf, int count) { int status = lgSpiXfer(spi_handle, tx_buf, rx_buf, count); } он возвращает количесиво посланных байт. похоже либа отрабатывает как надо. кстати его конфигурация мало чем отличается от нативной int lgSpiOpen(int spiDev, int spiChan, int baud, int spiFlags) { int handle; lgSpiObj_p spi; int fd; char spiMode; char spiBits = 8; char dev[128]; LG_DBG(LG_DEBUG_TRACE, "spiDev=%d spiChan=%d baud=%d spiFlags=0x%X", spiDev, spiChan, baud, spiFlags); spiMode = spiFlags & 3; spiBits = 8; sprintf(dev, "/dev/spidev%d.%d", spiDev, spiChan); if ((fd = open(dev, O_RDWR)) < 0) { return LG_SPI_OPEN_FAILED; } if (ioctl(fd, SPI_IOC_WR_MODE, &spiMode) < 0) { close(fd); return LG_SPI_IOCTL_FAILED; } if (ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &spiBits) < 0) { close(fd); return LG_SPI_IOCTL_FAILED; } if (ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &baud) < 0) { close(fd); return LG_SPI_IOCTL_FAILED; } handle = lgHdlAlloc( LG_HDL_TYPE_SPI, sizeof(lgSpiObj_t), (void **)&spi, _lgSpiClose); if (handle < 0) { PARAM_ERROR(LG_NO_HANDLE, "no free handles"); } spi->fd = fd; spi->speed = baud; spi->flags = spiFlags; return handle; } Изменено 20 сентября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 (изменено) · Жалоба у меня в boot/overlay есть sun50i-h5-spi-spidev.dtbo но я не могу его открыть. нужно декомпилировать. как это сделать? Изменено 20 сентября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба 10 minutes ago, jenya7 said: нужно декомпилировать. как это сделать? dtc -i dtb -o dts <file> 50 minutes ago, jenya7 said: ret возвращает -1 На каком этапе? Вы его числами кормите вместо указателей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 (изменено) · Жалоба On 9/20/2022 at 12:46 PM, aaarrr said: dtc -i dtb -o dts <file> На каком этапе? на первой же строке ret = ioctl(fd, SPI_IOC_WR_MODE, 0); On 9/20/2022 at 12:46 PM, aaarrr said: На каком этапе? Вы его числами кормите вместо указателей. а. я понял. может быть проблема. я посмотрел файл /dts-v1/; / { compatible = "allwinner,sun50i-h5"; fragment@0 { target-path = "/aliases"; __overlay__ { spi0 = "/soc/spi@1c68000"; spi1 = "/soc/spi@1c69000"; }; }; fragment@1 { target = <0xffffffff>; __overlay__ { #address-cells = <0x01>; #size-cells = <0x00>; spidev@0 { compatible = "armbian,spi-dev"; status = "disabled"; reg = <0x00>; spi-max-frequency = <0xf4240>; }; }; }; fragment@2 { target = <0xffffffff>; __overlay__ { #address-cells = <0x01>; #size-cells = <0x00>; spidev@0 { compatible = "armbian,spi-dev"; status = "disabled"; reg = <0x00>; spi-max-frequency = <0xf4240>; }; }; }; __fixups__ { spi0 = "/fragment@1:target:0"; spi1 = "/fragment@2:target:0"; }; }; очень настораживает строка status = "disabled"; Изменено 20 сентября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба 30 minutes ago, jenya7 said: очень настораживает строка status = "disabled"; Если бы она оставалась, то устройства spidev не было бы. Проверьте pinctrl: mount -t debugfs - /sys/kernel/debug cat /sys/kernel/debug/pinctrl/pinctrl-maps И убедитесь, что пины spi никто не задействует как gpio. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 (изменено) · Жалоба On 9/20/2022 at 1:22 PM, aaarrr said: Если бы она оставалась, то устройства spidev не было бы. Проверьте pinctrl: mount -t debugfs - /sys/kernel/debug cat /sys/kernel/debug/pinctrl/pinctrl-maps И убедитесь, что пины spi никто не задействует как gpio. ну это вроде соответствует действительности device 1c68000.spi state default type MUX_GROUP (2) controlling device 1c20800.pinctrl group PC0 function spi0 device 1c68000.spi state default type MUX_GROUP (2) controlling device 1c20800.pinctrl group PC1 function spi0 device 1c68000.spi state default type MUX_GROUP (2) controlling device 1c20800.pinctrl group PC2 function spi0 device 1c68000.spi state default type MUX_GROUP (2) controlling device 1c20800.pinctrl group PC3 function spi0 по пинам это верно и больше никто к этим пинам не обращается. Изменено 20 сентября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба Попробуйте циклическую посылку осциллографом посмотреть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба On 9/20/2022 at 1:38 PM, aaarrr said: Попробуйте циклическую посылку осциллографом посмотреть. не вижу никакого движения на пинах SPI пробовал нативным методом int SPI_Xfer(uint8_t *tx_buf, uint8_t *rx_buf, int size) { int status; xfer[0].len = size; xfer[0].tx_buf = (unsigned long)tx_buf; xfer[1].len = size; xfer[1].rx_buf = (unsigned long)rx_buf; status = ioctl(spi_fd, SPI_IOC_MESSAGE(1), xfer); return status; } тоже не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба 4 minutes ago, jenya7 said: не вижу никакого движения на пинах SPI Вообще ни на каких (CS, CLK, MOSI)? В каком они состоянии - H/L/Z? Можно еще проверить, что время выполнения коррелирует с частотой SPI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба On 9/20/2022 at 2:08 PM, aaarrr said: Вообще ни на каких (CS, CLK, MOSI)? В каком они состоянии - H/L/Z? Можно еще проверить, что время выполнения коррелирует с частотой SPI. пины мертвые, все в нуле. время исполнения? нужно вытащить atomic clock не уверен что у него резолюция в микросекундах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба 2 minutes ago, jenya7 said: пины мертвые, все в нуле. cat /sys/kernel/debug/gpio - мало ли еще попробуйте перезагрузить драйвер spi: echo 1c68000.spi > /sys/bus/platform/drivers/sun6i-spi/unbind echo 1c68000.spi > /sys/bus/platform/drivers/sun6i-spi/bind Just now, jenya7 said: время исполнения? нужно вытащить atomic clock не уверен что у него резолюция в микросекундах. Не нужно, достаточно N больших блоков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 сентября, 2022 Опубликовано 20 сентября, 2022 · Жалоба On 9/20/2022 at 2:55 PM, aaarrr said: cat /sys/kernel/debug/gpio - мало ли еще попробуйте перезагрузить драйвер spi: echo 1c68000.spi > /sys/bus/platform/drivers/sun6i-spi/unbind echo 1c68000.spi > /sys/bus/platform/drivers/sun6i-spi/bind Не нужно, достаточно N больших блоков. это значит на этих пинах нет проблем? gpiochip1: GPIOs 0-223, parent: platform/1c20800.pinctrl, 1c20800.pinctrl: gpio-20 ( |orangepi:red:status ) out lo gpio-102 ( |gmac-3v3 ) out hi gpio-166 ( |cd ) in lo IRQ ACTIVE LOW gpio-204 ( |usb0_id_det ) in hi IRQ gpiochip0: GPIOs 352-383, parent: platform/1f02c00.pinctrl, 1f02c00.pinctrl: gpio-354 ( |usb0-vbus ) out lo gpio-355 ( |sw4 ) in hi IRQ ACTIVE LOW gpio-362 ( |orangepi:green:pwr ) out hi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться