Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI BeagleBoneBlack BBB
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
В. Прокофьев
Angstrom Linux, BBB.
Потыкался, вроде бы включил SPI (прописал eEnv.txt: optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-SPI0-01,BB-SPI1-01 )
Но проблемы.
1. Иногда не появляется SPI2. А иногда появляется) Так и не понял от чего зависит, перезагружался, то есть, то нет. SPI1 вроде нормально.
2. После включения D1 работает на передачу. Т.е. получается, что D1 - MOSI. В описании вроде наоборот?
2. SPI2 включил, осцилом смотрю -- передает. Опрашиваю раз в секудну. По 4 байта. Сделал перемычку которую включаю в питание или в землю. По умолчанию в питании, читает все 4 байта 255, нормально, достаю, включаю в землю, приходят все байты одиноковые(второй столбик первые два байта выведено)
TransferOK <97> returned:<254 254>
TransferOK <97> returned:<252 252>
TransferOK <97> returned:<248 248>
TransferOK <97> returned:<240 240>
TransferOK <97> returned:<224 224>
TransferOK <97> returned:<192 192>
TransferOK <97> returned:<128 128>
TransferOK <97> returned:<0 0>

Узнаете? Каждое число отличается от соседнего сдвигом влево на 1. Что это за бред?)
Подаю ему MISO на MOSI читает 255.

SPI1 работает четко!



Код
uint8_t BBSpiManager::readByte(){
     struct spi_ioc_transfer xfer[2];
      string inp, outp;
      outp = "abcd";
      inp = "0000";
      //inp.resize( outp.size() );

      int res=0;

      memset(xfer, 0, sizeof xfer);

      xfer[0].tx_buf = (unsigned long)outp.data();
      xfer[0].rx_buf = (unsigned long)inp.data();
      xfer[0].len = inp.size();
      xfer[0].speed_hz = 100000;
      xfer[0].cs_change = 1;
      xfer[0].bits_per_word = 8;
      xfer[0].delay_usecs= 10;

        res = ioctl(spiDev, SPI_IOC_MESSAGE(1), &xfer);
        usleep(10000);

    return 0;
    }
В. Прокофьев
Кажется, вопрос решился. Точно не уверен, тестирую.
По умолчанию, в папке /lib/firmware были файлы
BB-SPI0-01-00A0.dtbo
BB-SPI1-01-00A0.dtbo
Поэтому uEnv.txt я написал:
optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-SPI0-01,BB-SPI1-01
При старте либо создавалось 3 файла в папке /dev/
spidev1.0
spidev2.0
spidev2.1
И второй порт лагал, либо один файл
spidev1.0

Я, следуя инструкции по включению, сделал три новых файла
BB-SPIDEV0-00A0.dts
BB-SPIDEV1-00A0.dts
BB-SPIDEV1A1-00A0.dts, получил из них *.dtbo
и переписал строку uEnv
optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-SPIDEV0,BB-SPIDEV1

При первом включении создалось
root@beaglebone:~# ls /dev/sp*
/dev/spidev1.0 /dev/spidev1.1 /dev/spidev2.0 /dev/spidev2.1
И второй порт заработал нормально. В чем причина такого поведения, не знаю. Стабильность появления второго порта после перезагрузки буду проверять
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.