Перейти к содержанию
    

SPI BeagleBoneBlack BBB

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

И второй порт заработал нормально. В чем причина такого поведения, не знаю. Стабильность появления второго порта после перезагрузки буду проверять

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...