LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

Просто на метре уже должна просесть напруга

Если у тебя девайс из одной атмеги, которая жрёт несколько десятков миллиампер, то ничего не просядет. Точнее просядет, но слишком незначительно. Да и просесть должно на 0.5В, чтобы МК что-то заметил (у ATMEGA8 минимальное рабочее напряжение по даташиту 4.5В, по факту заработает и при большей просадке). USB HDD, 3G-модемы жрут сотни миллиампер, поэтому просадка сильнее.

А также не понятно, куда крепить экран кабеля со стороны устройства с контроллером.

Соединять экран с GND, не? И как это зависит от используемого микроконтроллера? Разве есть микроконтроллеры с отдельным входом для экрана кабеля USB? Вроде у всех только D+, D-, VBUS и GND. Ну максимум ещё ID, если умеет OTG.

И самое: можно ли переинициализовать V-USB без сброса состояния МК?

Должно быть можно. Ну вообще запретить прерывание INT0, перевести какую-то ногу (не помню то ли D+, то ли D-) в режим выхода и выдать ноль в течении 250 мс. Это по сути дела будет имитацией отключения девайса от компьютера (в хосте есть подтяжка линии к земле резистором 15 кОм, в девайсе по схеме V-USB надо поставить подтяжку 1.5 кОм к плюсу, если принудительно прижать линию к земле, то это будет выглядеть как пропадание подтяжки 1.5 кОм). Не по стандарту, но всегда работает. Если не жалко ног, то можно резистор подтяжки 1.5 кОм подключить не к плюсу, а к ещё одной ножке МК. Тогда надо просто выдавать 0 на эту ножку, чтобы отключить подтяжку. Это будет уже полностью по стандарту. Когда подтяжка вернётся хост пошлёт USB RESET (вызывает сброс машины состояний USB, а не всего МК). V-USB это корректно обработает.

Дык есть же реалиция.

Реализация есть, но она сильно нарушает стандарт USB (Interrupt endpoint вроде как нельзя создавать на Low Speed устройстве). И поэтому не работает на многих ОС. И нет гарантий, что не перестанет работать с обновлениями на остальных. Хотя где-то работает, да.

Так что в сухом остатке то? Получается, что проще оставаться на UART, если устройство критично с внезапной смене состояний?

STM32F103C8 стоит дешевле, чем ATMEGA8 + FT232. Причём значительно дешевле. При этом имеет раз в 10 большую производительность ядра, в несколько раз больше флеша и ОЗУ, а скорость USB до 12 МБит/сек (полноценное Full Speed устройство + поддежка всех типов endpoint - реализуй любой класс и это не будет нарушать никаких стандартов). Ну и нормальная фон-неймановская архитектура вместо ущербной гарвардской (последняя вызывает сильное раздувание кода, если активно использовать указатели + указатели сами по себе бывают двух типов и это постоянно надо держать в голове).

Исправление KivApple, :

Просто на метре уже должна просесть напруга

Если у тебя девайс из одной атмеги, которая жрёт несколько десятков миллиампер, то ничего не просядет. Точнее просядет, но слишком незначительно. Да и просесть должно на 0.5В, чтобы МК что-то заметил (у ATMEGA8 минимальное рабочее напряжение по даташиту 4.5В, по факту заработает и при большей просадке). USB HDD, 3G-модемы жрут сотни миллиампер, поэтому просадка сильнее.

А также не понятно, куда крепить экран кабеля со стороны устройства с контроллером.

Соединять экран с GND, не? И как это зависит от используемого микроконтроллера? Разве есть микроконтроллеры с отдельным входом для экрана кабеля USB? Вроде у всех только D+, D-, VBUS и GND. Ну максимум ещё ID, если умеет OTG.

И самое: можно ли переинициализовать V-USB без сброса состояния МК?

Должно быть можно. Ну вообще запретить прерывание INT0, перевести какую-то ногу (не помню то ли D+, то ли D-) в режим выхода и выдать ноль в течении 250 мс. Это по сути дела будет имитацией отключения девайса от компьютера (в хосте есть подтяжка линии к земле резистором 15 кОм, в девайсе по схеме V-USB надо поставить подтяжку 1.5 кОм к плюсу, если принудительно прижать линию к земле, то это будет выглядеть как пропадание подтяжки 1.5 кОм). Не по стандарту, но всегда работает. Если не жалко ног, то можно резистор подтяжки 1.5 кОм подключить не к плюсу, а к ещё одной ножке МК. Тогда надо просто выдавать 0 на эту ножку, чтобы отключить подтяжку. Это будет уже полностью по стандарту. Когда подтяжка вернётся хост пошлёт USB RESET (вызывает сброс машины состояний USB, а не всего МК). V-USB это корректно обработает.

Дык есть же реалиция.

Реализация есть, но она сильно нарушает стандарт USB (Interrupt endpoint вроде как нельзя создавать на Low Speed устройстве). И поэтому не работает на многих ОС. И нет гарантий, что не перестанет работать с обновлениями на остальных. Хотя где-то работает, да.

Так что в сухом остатке то? Получается, что проще оставаться на UART, если устройство критично с внезапной смене состояний?

STM32F103C8 стоит дешевле, чем ATMEGA8 + FT232. Причём значительно дешевле. При этом имеет раз в 10 большую производительность ядра, в несколько раз больше флеша и ОЗУ, а скорость USB до 12 МБит/сек (полноценное Full Speed устройство - реализуй любой класс и это будет не нарушать никаких стандартов). Ну и нормальная фон-неймановская архитектура вместо ущербной гарвардской (последняя вызывает сильное раздувание кода, если активно использовать указатели + указатели сами по себе бывают двух типов и это постоянно надо держать в голове).

Исходная версия KivApple, :

Просто на метре уже должна просесть напруга

Если у тебя девайс из одной атмеги, которая жрёт несколько десятков миллиампер, то ничего не просядет. Точнее просядет, но слишком незначительно. Да и просесть должно на 0.5В, чтобы МК что-то заметил (у ATMEGA8 минимальное рабочее напряжение по даташиту 4.5В, по факту заработает и при большей просадке). USB HDD, 3G-модемы жрут сотни миллиампер, поэтому просадка сильнее.

А также не понятно, куда крепить экран кабеля со стороны устройства с контроллером.

Соединять экран с GND, не? И как это зависит от используемого микроконтроллера? Разве есть микроконтроллеры с отдельным входом для экрана кабеля USB? Вроде у всех только D+, D-, VBUS и GND. Ну максимум ещё ID, если умеет OTG.

И самое: можно ли переинициализовать V-USB без сброса состояния МК?

Должно быть можно. Ну вообще запретить прерывание INT0, перевести какую-то ногу (не помню то ли D+, то ли D-) в режим выхода и выдать ноль в течении 250 мс. Это по сути дела будет имитацией отключения девайса от компьютера (в хосте есть подтяжка линии к земле резистором 15 кОм, в девайсе по схеме V-USB надо поставить подтяжку 1.5 кОм к плюсу, если принудительно прижать линию к земле, то это будет выглядеть как пропадание подтяжки 1.5 кОм). Не по стандарту, но всегда работает. Если не жалко ног, то можно резистор подтяжки 1.5 кОм подключить не к плюсу, а к ещё одной ножке МК. Тогда надо просто выдавать 0 на эту ножку, чтобы отключить подтяжку. Когда подтяжка вернётся хост пошлёт USB RESET (вызывает сброс машины состояний USB, а не всего МК). V-USB это корректно обработает.

Дык есть же реалиция.

Реализация есть, но она сильно нарушает стандарт USB (Interrupt endpoint вроде как нельзя создавать на Low Speed устройстве). И поэтому не работает на многих ОС. И нет гарантий, что не перестанет работать с обновлениями на остальных. Хотя где-то работает, да.

Так что в сухом остатке то? Получается, что проще оставаться на UART, если устройство критично с внезапной смене состояний?

STM32F103C8 стоит дешевле, чем ATMEGA8 + FT232. Причём значительно дешевле. При этом имеет раз в 10 большую производительность ядра, в несколько раз больше флеша и ОЗУ, а скорость USB до 12 МБит/сек (полноценное Full Speed устройство - реализуй любой класс и это будет не нарушать никаких стандартов). Ну и нормальная фон-неймановская архитектура вместо ущербной гарвардской (последняя вызывает сильное раздувание кода, если активно использовать указатели + указатели сами по себе бывают двух типов и это постоянно надо держать в голове).