Як ведаць, злучэнне USB губляецца

Я працую з кантролерам AT90USB1287 з USB-сувязі з ПК. Я пасылаю некаторыя каманды ад ПК да кантролер з дапамогай USB-сувязі, каб актываваць некаторыя кіраваны перамыкач. Я магу змяніць стан выключальніка шляхам адпраўкі каманд (ON і OFF, якім кіруе напругай перамыкача).

Мая праблема ў тым, калі перамыкач уключаны, і, на жаль, карыстальнік забыўся адпраўляць каманду з кампутара, і ён выключыць кампутар, але ўсё ж кантролер працуе ці выкажам здагадку, калі я страціў сувязь з ПК праз USB, пры гэтым час гэта выклікае праблемы.

Я хачу, каб праверыць у ATUSB1287 кодзе самога пульта кіравання, калі злучэнне USB вызваленым, то каманда перамыкача сэрвіснага т павінна быць роўная нулю.

Ці можа адзін дапамагчы мне, як ведаць, USB злучэнне страчана ці не? гэта падабаецца мой падыход можна праверыць у галоўным цыкле, што злучэнне USB губляецца? калі страціў адключаюць.

Любы іншы спосаб выключыць? пасля страты злучэння з ПК або выключэння кампутара.

Я пачатковец у такога роду рэчы, калі нешта няправільна ў гэтым пытанні, калі ласка, прабачце мяне.

6

5 адказы

Цалкам верагодна, што рашэнне, якое будзе найлепшым чынам адпавядаць вашым патрабаванням будзе шукаць, калі 1 мс USB кадр падзея перастае адбывацца. Там павінны быць звязаныя логікі ў вашым USB-код для апрацоўкі гэтых падзей, якія вы маглі б скінуць страту таймера кадра. Калі таймер кіруе мінае, вы ведаеце, што PC больш не актыўна кіраваць USB, нават калі VBUS ўсё яшчэ прысутнічае.

2
дададзена
@Chirs Stratton Дзякуй за адказ, але я пачатковец у кантролер праграмавання, я не мог атрымаць паняцце ясна, што калі я маю рацыю, я патрэбен таймер для праверкі падзей USB кадра страчаныя ці не. Ці не так? калі вы не можаце даць некаторую інфармацыю пра гэта?
дададзена аўтар BI_Badger, крыніца

На старонцы 258 тэхнічнае апісанне :

<�Р> • 0 - VBUS: Vbus сцяг
  Значэнне, лічаныя з гэтага біта паказвае стан   VBUS кантактны. Гэты біт можа быць выкарыстаны ў прыладзе   рэжым для маніторынгу стану падлучэння USB шыны прыкладання. глядзець   Раздзел 22,10, старонка 255   для больш падрабязнай інфармацыі.

На старонцы 255:

<�Р> 22,10 Убудова выяўлення
  Злучэнне USB выяўляецца VBUS калодкі, дзякуючы наступнай архітэктуры:
    
  Логіка кіравання VBUS калодкі выдае сігнал адносна VBUS   Ўзровень напружання:
  • Сігнал «Session_valid» мае высокі актыўны ўзровень   калі напружанне на VBUS пляцоўку вышэй або   роўным 1.4В. Калі ніжэй 1.4V, то сігнал не актыўны
  • Сігнал «Vbus_valid» актыўны высокі ўзровень, калі   Напружанне на VBUS пляцоўку вышэй або роўная 4.4V. Калі ніжэй 4.4V, то сігнал не актыўны
  • Біт стану VBUS усталёўваецца   калі VBUS больш, чым «Vbus_   дзейнічае ». Біт стану VBUS чысціцца   калі VBUS падае ніжэй   (Паводзіны гістарэзісу) «Session_valid»
  • Сцяг VBUSTI усталёўваецца кожны раз, калі VBUS бітага змяненне стану </р>

Не ўпэўнены, калі гэта тое, што шукаеце, але лічыў, што я б размясціць яго ў любым выпадку.

2
дададзена
Як вы пасылаеце каманды? Вы напісалі дадатак на вашым кампутары, які абменьваецца дадзенымі з мікракантролерам ці гэта з HyperTerminal ці нешта падобнае?
дададзена аўтар Jim, крыніца
Кандэнсатар ці гадзіны батарэя, магчыма, можа быць выкарыстана для харчавання кантролера дастаткова доўга, каб закрыць перамыкач.
дададзена аўтар Jim, крыніца
Яшчэ адна праблема, якую я бачу, што вы працуеце ў, калі вы зачыніце C# дадатак, не выключаючы камутатар. Магчыма, вы павінны пераканацца, што прыкладанне адпраўляе «ад» каманды «OnExit».
дададзена аўтар Jim, крыніца
Я пайшоў бы programmers.stackexchange і спытаць, ці ёсць спосаб, у C#, каб вызначыць, калі кампутар знаходзіцца ў спячым рэжыме. Калі гэта так, то я б інтэрфейс, які прызначаны для аўтаматычнай адпраўкі якая адыходзіць каманды, калі «sleep_mode == праўды».
дададзена аўтар Jim, крыніца
Вялікі дзякуй за адказ, я знайшоў, што гэта будзе вырашыць маю праблему, але ў мяне ёсць пытанне, нават калі мой кампутар знаходзіцца ў спячым рэжыме, то USB падае харчаванне праз батарэю. так што ў той час не ў стане выключэння пераключальніка.
дададзена аўтар BI_Badger, крыніца
Я распрацаваў карыстацкі інтэрфейс ў C#, я адпраўка каманды з інтэрфейсу і я атрыманне адказу ад кантролера.
дададзена аўтар BI_Badger, крыніца
У мяне ёсць яшчэ адзін пад сумнеў Калі я страціў злучэнне USB, то мікра-кантролер перастане працаваць ці трымаць гэта працуе, пакуль харчаванне не ідзе ўніз, не залежыць ад падключэння USB.
дададзена аўтар BI_Badger, крыніца
Большасць хастоў PC будзе падтрымліваць VBUS, нават калі аперацыйная сістэма выключана. Так, назіраючы VBUS не з'яўляецца рашэннем праблемы. -1
дададзена аўтар Ali Chen, крыніца
<�Р>, як ведаць, злучэнне USB губляецца ці не?

Паглядзіце ў кіраўніцтве па эксплуатацыі вашага мікракантролера, павінна быць інфармацыя пра тое, як злавіць USB Прыпыненне падзея. Гэта падзея адбываецца, калі хост перастае ўзаемадзейнічаць з прыладай у цэлым больш за 3 мс - ня пасылаючы нават кадр падзеі. USB-прылады павінны знізіць ток USB ў гэтым стане.

Звярніце ўвагу, што гэта не будзе карысным у выпадку, калі праграма драйвера або кіравання проста забіваюць, напрыклад, менеджэр задач. Падзея USB кадр будзе пасланы кожную мілісекунду.

1
дададзена
У мяне ёсць яшчэ адзін пад сумнеў Калі я страціў злучэнне USB, то мікракантролер перастане працаваць ці трымаць гэта працуе, пакуль харчаванне не ідзе ўніз, не залежыць ад падключэння USB.
дададзена аўтар BI_Badger, крыніца
Гэта адзіны правільны адказ на запыт OP ст.
дададзена аўтар Ali Chen, крыніца
Каб пераканацца ў тым, што гаспадар на самай справе няма, прылада можа паспрабаваць аднавіць сувязь. Калі няма адказу, то гаспадар сапраўды мёртвы.
дададзена аўтар Ali Chen, крыніца

Калі вы выкарыстоўваеце рамкі LUFA для кіравання сувяззю USB, то вы можаце выкарыстоўваць падзея EVENT_USB_Device_Disconnect (), каб выявіць фізічнае адключэнне кабеля (гэтак жа, як выяўленне VBUS Уоллес паказваў).

Адказ Крыса Stratton з'яўляецца таксама падтрымліваецца ў рамках LUFA, праз EVENT_USB_Device_StartOfFrame (), які прымаецца кожныя 1 мс, і можа быць выкарыстана для вызначэння правільнага падлучэння на ўзроўні пратаколу. Проста скінуць таймер кожны раз, калі выклікаецца падзея, і праверыць, калі таймер ніколі не перапаўняецца - калі гэта так, то прылада фізічна падлучаны, але не размаўляючы.

You can find out more about these events in LUFA via the documentation here: LUFA USB Events

Калі вы коціцеся сваёй ўласную рэалізацыі, ёсць шмат, каб атрымаць з зыходнага кода LUFA і прыкладаў для AVR.

1
дададзена

Беспоставочной спосаб USB-спецыфічны будзе для кантролера, каб час ад часу запытваць кампутар і чакаць пацверджання. Пасля таго, як N запытаў без пацверджання, кантролер можа выказаць здагадку, што сувязь была страчана.

0
дададзена
@verendra: Да "не USB-спецыфічны», я меў на ўвазе метад не патрабуе якіх-небудзь адмысловых магчымасцяў пратаколу USB або USB-абсталявання. Ён можа працаваць з любым тыпам канала сувязі - RS-232, Ethernet, Wi-Fi; Вам не трэба будзе ведаць або сыходу. На самай справе, гэта не так проста, як тое, што мы робім у вуснай форме, калі мы маем сувязь сотавага тэлефона дзярмо? І так, у гэтым выпадку, кантролер будзе задаваць пытанні і ПК будзе адказам.
дададзена аўтар Ellie Kesselman, крыніца
Так, калі гэта магчыма, страціць харчаванне кантролера, то ён не зможа выключыць прыладу. Калі гэта праблема, вам спатрэбіцца рэзервовае капіраванне або крыніца бесперабойнага харчавання, які будзе па меншай меры, трымаць кантролер працуе дастаткова доўга, каб зрабіць адсечку.
дададзена аўтар Ellie Kesselman, крыніца
Як мяркуецца, так, калі ў вас яшчэ ёсць дастаткова сіл, каб выключыць яго. Тым не менш, гэта адносна лёгка зрабіць у апаратных сродках.
дададзена аўтар Ellie Kesselman, крыніца
@verendra, гэта рашэнне, якое я хацеў бы выкарыстаць - некаторыя ПК пакінуць уладу прымяняецца, калі завяршэнне працы, і гэта таксама правярае ваша праграмнае забеспячэнне працуе. Ён проста азначае, што, акрамя каманды, якія ўжо ёсць дадаць новы, як вы адправіце OK? на кампутар і дадатак адказвае Ды . Калі вы не атрымаеце адказ на нейкі час вы ведаеце, што нешта не так (або ПК выключэнне), і вы можаце адключыць выснову праз некаторы час.
дададзена аўтар Timo002, крыніца
@verendra, ды гэта так. Адказ Крыс Stratton толькі адправіў яшчэ адзін добры адзін таксама, калі вам не трэба, каб праверыць ваша праграмнае забеспячэнне працуе нармальна, а.
дададзена аўтар Timo002, крыніца
Вы можаце даць мне больш дакладнае ўяўленне пра тое, як зрабіць гэта, не пэўны USB шлях азначае, што я думаю, што без праверкі падлучэння USB. Як гэта зрабіць вы можаце даць некалькі прыкладаў.
дададзена аўтар BI_Badger, крыніца
@JRobert Калі ў мяне ёсць крыніца бесперабойнага харчавання да кантролер, нават калі я страціў злучэнне USB, то я буду мець магчымасць адключыць маё прыладу? Таму што я патрэбны перамыкач майго прылады з дапамогай SPI сувязі.
дададзена аўтар BI_Badger, крыніца
@JRobert У мяне ёсць яшчэ адно сумненне Калі я страціў злучэнне USB, то мікракантролер перастане працаваць ці трымаць гэта працуе, пакуль харчаванне не ідзе ўніз, не залежыць ад падключэння USB.
дададзена аўтар BI_Badger, крыніца
@PeterJ Тут я адпраўка каманд ад PC (C # інтэрфейсу) на кантролер і кантролер рэагуе на гэтыя каманды. З вашага пункту гледжання, мне трэба адправіць каманду з кантролера? ня з кампутара? ці не так?
дададзена аўтар BI_Badger, крыніца