Ioctl tiocmset protocol error

Arduino Uno R3 failure Recently I’ve got a genuine Arduino Uno R3 from my friend to repair. The problem with his board was actually very generic – it has just stopped working. Personally, I don’t buy such boards, because they are extremely overpriced. I have been using several Chinese clones around for years and […]

Содержание

  1. Arduino Uno R3 failure
  2. unixforum.org
  3. Программирование RS232 устройства (Попытки подобрать протокол для ТСД)
  4. Программирование RS232 устройства
  5. UART: аппаратное управление потоком
  6. Re: UART: аппаратное управление потоком
  7. Re: UART: аппаратное управление потоком
  8. Re: UART: аппаратное управление потоком
  9. Re: UART: аппаратное управление потоком
  10. Re: UART: аппаратное управление потоком
  11. Re: UART: аппаратное управление потоком
  12. Re: UART: аппаратное управление потоком
  13. Re: UART: аппаратное управление потоком
  14. Re: UART: аппаратное управление потоком
  15. Re: UART: аппаратное управление потоком
  16. Re: UART: аппаратное управление потоком

Arduino Uno R3 failure

Recently I’ve got a genuine Arduino Uno R3 from my friend to repair. The problem with his board was actually very generic – it has just stopped working. Personally, I don’t buy such boards, because they are extremely overpriced. I have been using several Chinese clones around for years and I have not encountered any problems so far.

At first sight, the USB interface was working fine and the board was detected by the system without any problems.

However, there was a problem with flashing a program with avrdude. The result log:

The microcontroller was fine, I successfully burned the bootloader to ATmega328P using another board acting as ArduinoISP. After several retries to flash the Arduino board via USB, I found out that the device sometimes disappeared from the system.

Finally, I took an oscilloscope… and immediately tracked down a faulty component. The 16 MHz crystal oscillator for ATmega16U2 was providing very weak signal level.

I replaced it with another 16 MHz crystal, which is a reliable clock source.

The Arduino board works perfectly again.

The photo below presents the faulty crystal oscillator.

Источник

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

Программирование RS232 устройства (Попытки подобрать протокол для ТСД)

Программирование RS232 устройства

Сообщение reinhard » 10.07.2007 08:29

Есть терминал сбора данных CIPHERLAB 8001 с последовательным интерфейсом. Программа для загрузки в него данных только под Windows. Требуется, чтобы он заработал под Linux. Под wine не заработала.
Под виндой запускаю HHD Serial port monitor и запускаю обмен данными. Программа и устройство настроены на 115200.
Вот такой протокол обмена (по данным монитора).

Далее около 20 тыс. строчек, повторяющих строчки 50-51.
Затем:

Далее протокол продолжается, я его «прицепил».
Но мне не удается дойти даже до этого места.

Вот как я понимаю что происходит:
комп лочит порт на 9600, сбрасывает RTS, посылает устройству символ с кодом 0x0f, пытается прочитать из порта, у него ничего не выходит.
Затем он лочит порт на 115200, сбрасывает RTS, посылает устройству символ с кодом 0x0f, и на этот раз успешно читает его из порта.
Осталось непонятным что означает

[red]IRP_MJ_DEVICE_CONTROL (IOCTL_SERIAL_SET_HANDFLOW: Set handshake information),DOWN,TRUE,0x0,01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 . [red]
Понятно, что это установка параметров handshake, но каких именно — не могу нигде найти. Подозреваю, что проблема именно в этом.

Вот код программы:

Будучи запущенной программа выводит

т.е. записала успешно, а прочитать не удалось в обоих случаях.
Пробоват подключать модем и писать в него AT — все работало, т.е.
Опыт программирования RS232 у меня более чем скромный, поэтому прошу помощи и/или указания на ошибки.
Заранее благодарен!

Источник

UART: аппаратное управление потоком

Интересует аппаратное управление потоком при помощи CTS/RTS сигналов из userspace.
Необходимо запретить передачу на порт при помощи RTS пина. У кого-нибудь это получалось?

В итоге ни CTS ни RTS не изменяются.
Может кто-нибудь что-то подскажет?

===============
извиняюсь за форматирование, ни один из типов форматирования, предложенных лором не показывает код нормально.

Re: UART: аппаратное управление потоком

Точного ответа не знаю, но CTS нельзя устанавливать, его можно только читать, то есть «serial | TIOCM_CTS » неправильно.

>В итоге ни CTS ни RTS не изменяются.

Программа то что выводит?

>ни один из типов форматирования

Re: UART: аппаратное управление потоком

>то есть «serial | TIOCM_CTS » неправильно.

да, я знаю, это от безысходности уже пробую.

>Программа то что выводит?

Сначала выводила что ни тот ни другой не установлен.
Поменял TIOCMSET на TIOCMBIC или TIOCMBIS — вродь как что-то меняет, судя по сообщениям.
Хотя вольтметр показывает, что уровень не меняется. Возможно дело в том, что там еще USB->Serial шнурок присутствует. Сейчас пробую без него на чистом /dev/ttySx. О результатах напишу.

А вы пробовали использовать эти ioctl?


>http://www.linux.org.ru/wiki/en/Lorcode тоже не подошёл?

попробовал, предпросмотр различий в результате от TeX w/o quoting не заметил. Браузер konqueror (4.3.1).

Re: UART: аппаратное управление потоком

Re: UART: аппаратное управление потоком

> А вы пробовали использовать эти ioctl?

Пробовал как-то. Для одного бестокового АЦП надо было. Адекватного поведения добиться не удалось, забил огромный преогромный хер и выкинул этот АЦП. И даже не жалею 🙂

Re: UART: аппаратное управление потоком

Когда решишь проблему, обязательно отпиши. Авось из дальнего ящика достану это г*вн* мамонта и попробую завести опять.

Re: UART: аппаратное управление потоком

Кажется решил. Работает весьма странно, но пин переключает. Следующий код запрещает передачу, путем установки RTS.

Но есть нюанс. У меня это заработало на чистом /dev/ttyS1. На /dev/ttyUSB0 не заработало. Или переходник USB->Serial не поддерживает эту штуку, то драйвер такой.

Re: UART: аппаратное управление потоком

Позвольте полюбопытствовать. Исходя из банальной эрудиции, аппаратное управление потоком работает автоматически исходя из условия наличия места в буфере приемника. Если места нет, то автоматом выставляется «занято». Передатчик прерывает передачу. Как только буфер вычитали, сигнал «занято» снимается и передача возобновляется. Поправте, где я не прав. И если прав, то в этой модели, управление RTS не имеет смысла.

Re: UART: аппаратное управление потоком

Исходя из банальной эрудиции, аппаратное управление потоком работает автоматически исходя из условия наличия места в буфере приемника. Если места нет, то автоматом выставляется «занято».

Не все контроллеры работают в автоматическом режиме. Иногда используется и ручное управление потоком. Такая ситуация и у моих заказчиков. Их железка тянет с моей железки данные по RS-232 и тормозит поток, когда ей это нужно. Мне нужно было промоделировать эту ситуацию. А лезть на уровень ядра для этого не хотелось.

Re: UART: аппаратное управление потоком

Тогда это называется программное управление потоком XOFF/XON. Какой-то странный подход, с одной стороны контроллер не поддеживает аппаратное управление потоком, при этом программное управление никто не реализовывает.

Железка заказчика не просто так тормозит, она просто из буфера не успевает вычитывать. Все это реализуется прозрачно и аппаратно. И тестировать нужно так же.

А то что вы нашли способ управлять пином. Это какой-то аппаратный баг, побочный эффект. Это как раньше по LPT делали ввод по шинам D0-D7. Выдаем на него 0xFF, а снаружи нужные пины заземляем. При чтении из порта это обнаруживается.

Re: UART: аппаратное управление потоком

Согласен, подход был не верным.

Я не знаю точно как заказчик управляет CTS/RTS, возможно и в автоматическом режиме. Но все же некоторые linux драйверы (например, для некоторых процессоров blackfin) умеют эмулировать hardware flow control через GPIO. Следовательно такой подход также используется.

Не думаю, что управление пином — это аппаратный баг и побочный эфект. Подобная возможность есть и под Windows.

Re: UART: аппаратное управление потоком

Про «брак» беру слова обратно. Таки залез в спецификацию 16550А и выяснилось что: Назначение бит регистра MCR: * Биты [7:5]=0 — зарезервированы. * Бит 4 — LME(Loopback Mode Enable) — разрешение режима диагностики: o 0 — нормальный режим, o 1 — режим диагностики (см. ниже). * Бит 3 — 1Е( Interrupt Enable) — разрешение прерываний с помощью внешнего выхода OUT2; в режиме диагностики поступает на вход MSR.7: o 0 — прерывания запрещены, o 1 — разрешены. * Бит 2 — OUT1C (OUT1 Bit Control) — управление выходным сигналом 1 (не используется); в режиме диагностики поступает на вход MSR.6. * Бит 1 — RTSC (Request To Send Control) — управление выходом RTS; в режиме диагностики поступает на вход MSR.4: o 1 — активен (-V), o 0 — пассивен (+V). * Бит 0 — DTRCfData Terminal Ready Control) — управление выходом DTR; в режиме диагностики поступает на вход MSR.5: o 1 — активен (-V), o 0 — пассивен (+V). LSR — регистр состояния линии (точнее, состояния приемопередатчика).

Принципиально дергать их можно. Вопрос, только как это скажется на работе всего контроллера. Опять же дока говорит, что «дергать» лучше в диагностических целях. Опять же неизвестно что будет с передатчиком который словит сигнал, он завершит передачу байта? или сразу тормознет. Если сразу тормознет, то несколько бит застрянет во входном регистре приемника и по идее их нужно будет от туда вычистить.

Источник

Please be positive and constructive with your questions and comments.


User avatar

rpwhite3

 
Posts: 13
Joined: Sun Jul 12, 2009 4:57 pm

Re: MiniPOV3 and batteries

Post

by rpwhite3 » Tue Aug 04, 2009 5:58 pm

ladyada wrote:hmm, email support@adafruit to get a rpelacement

I got the replacement and just tried it on the linux box. I am getting further now when I run ‘make program-digg’ for example I get this ..

Code: Select all

avrdude -p attiny2313 -P /dev/ttyUSB1	 -c dasa -U flash:w:digg.hex

ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

make: *** [program-digg] Error 1

Off to try it on the windows machine…. Not sure what the above means?

OK I give up, still doesn’t see it on the windows machine? I will just send both back and just use serial ports…When I need to use it.

:(


adafruit

 
Posts: 12151
Joined: Thu Apr 06, 2006 4:21 pm

Re: MiniPOV3 and batteries

Post

by adafruit » Tue Aug 04, 2009 7:39 pm

it sounds like theres something with your motherboard or i something?
never heard of this happening on TWO computers so perhaps you are cursed? :D


User avatar

rpwhite3

 
Posts: 13
Joined: Sun Jul 12, 2009 4:57 pm

Re: MiniPOV3 and batteries

Post

by rpwhite3 » Wed Aug 05, 2009 9:35 am

ladyada wrote:it sounds like theres something with your motherboard or i something?
never heard of this happening on TWO computers so perhaps you are cursed? :D

I am thinking the later…. :) Oh well life goes on. On to other projects… It works through the serial ports so I can live with that…

:)


Please be positive and constructive with your questions and comments.


Recently I’ve got a genuine Arduino Uno R3 from my friend to repair. The problem with his board was actually very generic – it has just stopped working. Personally, I don’t buy such boards, because  they are extremely overpriced. I have been using several Chinese clones around for years and I have not encountered any problems so far.

At first sight, the USB interface was working fine and the board was detected by the system without any problems.

[18955.789736] usb 1-1: new full-speed USB device number 6 using xhci_hcd
[18955.973387] usb 1-1: New USB device found, idVendor=2341, idProduct=0043, bcdDevice= 0.01
[18955.973388] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[18955.973389] usb 1-1: Manufacturer: Arduino (www.arduino.cc)
[18955.973390] usb 1-1: SerialNumber: 7543931373735141E020
[18955.993292] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
[18955.993570] usbcore: registered new interface driver cdc_acm
[18955.993571] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

However, there was a problem with flashing a program with avrdude. The result log:

avrdude: Version 6.3, compiled on Jan 17 2017 at 11:00:16
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         Using Port                    : /dev/ttyACM0
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
ioctl("TIOCMSET"): Protocol error
ioctl("TIOCMSET"): Protocol error
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

avrdude done.  Thank you.

The microcontroller was fine, I successfully burned the bootloader to ATmega328P using another board acting as ArduinoISP. After several retries to flash the Arduino board via USB, I found out that the device sometimes disappeared from the system.

Finally, I took an oscilloscope… and immediately tracked down a faulty component. The 16 MHz crystal oscillator for ATmega16U2 was providing very weak signal level.

I replaced it with another 16 MHz crystal, which is a reliable clock source.

The Arduino board works perfectly again.

The photo below presents the faulty crystal oscillator.

I just got my Arduino UNO and I’m trying to upload the blink example but the upload fails with

ioctl("TIOCMSET"): Broken pipe
ioctl("TIOCMSET"): Broken pipe
avrdude: stk500_recv(): programmer is not responding
ioctl("TIOCMSET"): Broken pipe

I have tried both Arduino IDE 1.0.1 (which I installed via my package manager) as well as version 1.0.5 which I downloaded from the arduino.cc website. I’m running Ubuntu Linux 12.10 if that makes a difference.

I’d appreciate any and all help in getting my arduino up and running!

asked Mar 27, 2014 at 19:55

Jonas's user avatar

2

As with any communication error, try these:

  • Disconnect and reconnect the USB cable.
  • Use a different USB cable.
  • Press the reset button on the board.
  • Restart the Arduino IDE.
  • Make sure you select the right board in Tools ► Board ►, e.g. If you are using the Duemilanove 328, select that instead of Duemilanove 128. The board should say what version it is on the microchip.
  • Make sure you selected the right port in Tools ► Serial Port ►. One way to figure out which port it is on is by following these steps:
    1. Disconnect the USB cable.
    2. Go to Tools ► Serial Port ► and see which ports are listed (e.g. COM4 COM5 COM14).
    3. Reconnect the USB cable.
    4. Go back to Tools ► Serial Port ►, and see which port appeared that wasn’t there before.
  • In extreme cases, you may need to burn the bootloader.

Answer adapted from here.

Community's user avatar

answered Mar 28, 2014 at 18:40

The Guy with The Hat's user avatar

1

It sounds like you have incorrect drivers or the wrong COM port (USB) selected in the IDE

Both are easy to fix. I’d imagine that it would be the COM port.

IDE

To do this:

Tools → Serial Port → [COM port… try a few different ones. Also you can use device manager to see which one disappears when you unplug your Arduino]

Few notes on photo:

#1. The selector for the COM port. Choose which one your board is on.

#2. That shows the COM port selected and board. I don’t have my UNO connected: ignore that the COM port isn’t showing up on the menu.

answered Mar 29, 2014 at 0:52

Anonymous Penguin's user avatar

Понравилась статья? Поделить с друзьями:
  • Io socket ssl pm 1177 global error undefined ssl object
  • Io netty channel abstractchannel error fix
  • Io error unknown host specified
  • Io error saving source cache
  • Io error encountered skipping file deletion