Jump to content

    

bobapro

Новичок
  • Content Count

    4
  • Joined

  • Last visited

Community Reputation

0 Обычный

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. Кажется, вопрос решился. Точно не уверен, тестирую. По умолчанию, в папке /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 И второй порт заработал нормально. В чем причина такого поведения, не знаю. Стабильность появления второго порта после перезагрузки буду проверять
  2. 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; }
  3. UDP не пробовал, попробую. Т.е. Вы считаете что кто-то по пути следования пакета его не пропускает? А чем в этом случае отличается посылка пакетта через сокет и через консоль linux? Не должны маршруты совпадать? Я подумал что если из консоли устанавливается связь, то виноват чисто исходный код в том, что пакет не дошел...
  4. День добрый! Столкнулся с проблемой на BeagleBoneBlack (angstrom) хотя, мне кажется, что ошибка не связана с ситемой. Дано: 1. Я могу послать TCP пакет от BBB на внешний сервер через командную строку, и все работает echo " 11111" > /dev/tcp/81.23.XX.XX/5555 2. Я не могу подключиться к серверу из приложения (код ниже, возникает Timeout error при попытке подключения) но! я могу послать пакет без проблем если разверну серверное ПО в своей локальной сети. Т.е. код вроде бы рабочий. Карта сети: BBB(192.168.1.7) -> Мой роутер (static IP 212.четотам... ) -> ... -> ... -> ServerRouter(81.23.XX.XX) -> Server(192.168.4.55) На другом конце стоит роутер который пробрасывает порт на сервер без выделенного IP. Мой компьютер подключен к моему роутеру по wifi. При этом, что странно: Мой копм посылает на сервер без проблем. BBB посылает на мой комп без проблем BBB посылает на сервер из командной строки, но не из приложения... Видимо, где-то проблема в коде, но где? Помогите) BBTcpErrorCode BBTCPClient::connectToServer(string serverIpAddr, int serverPort) { //создаем сокет LOG("Create socket..."); if ((m_socket = socket(PF_INET, SOCK_STREAM, 0)) < 0) { return BBTCP_SOCKETERROR; } LOG("Socket created!"); /* Обнуляем переменную m_addr и забиваем её нужными значениями */ bzero(&m_addr, sizeof(m_addr)); m_addr.sin_family = AF_INET; // обязательно AF_INET! m_addr.sin_port = htons(serverPort); // 0 - выдать порт автоматом /* Переводим адрес в нужный нам формат */ if (inet_aton(m_IpAddr.c_str(), &m_addr.sin_addr) == 0) { LOG_INT("Error assign IP ADDR!", errno); return BBTCP_ADDRERROR; } const int on = 1; setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on); /* Биндим сокет */ if (bind(m_socket, (struct sockaddr*) &m_addr, sizeof(m_addr)) < 0) { LOG_INT("Error bind socket!", errno); return BBTCP_BINDERROR; } /* Обнуляем переменную s_addr и забиваем её нужными значениями */ bzero(&s_addr, sizeof(s_addr)); s_addr.sin_family = AF_INET; s_addr.sin_port = htons(serverPort); /* Переводим адрес в нужный нам формат */ if (inet_aton(serverIpAddr.c_str(), &s_addr.sin_addr) == 0) { return BBTCP_ADDRERROR; } if (connect(m_socket, (struct sockaddr*) &s_addr, sizeof(s_addr)) < 0) { return BBTCP_CONNECTERROR; // <- When I try to send to 82.XX.XX.XX this error arise after ~ 1 minute ( errno = 101 -- timeout ) } return BBTCP_OK; }