Usb aloqasini bilish qanday qilib yo'qoladi

Men AT90USB1287 boshqaruv apparati bilan kompyuterga USB orqali aloqada ishlayapman. Ba'zi nazorat qilinadigan kalitlarni yoqish uchun USB-dan foydalangan holda kompyuterdan tekshiruvchilarga ba'zi buyruqlar yuboraman. Men buyruqlarni yuborish orqali kalitlarni o'zgartira olaman (ON va OFF, voltaj nazoratidagi kalit).

Muammo shundaki, switch ON holatida va afsuski, foydalanuvchi kompyuterdan OFF buyrug'i yuborishni unutgan va u kompyuterni o'chirib qo'yishi mumkin, lekin men u orqali kompyuterni yo'qotib qo'ysam ham, tekshiruvchi ishlayapti yoki o'ylayapti.

ATUSB1287 boshqaruv kodini tekshirishni xohlayman, agar usb aloqasi o'chirilsa, u holda swicth t komandasi nolga teng bo'lishi kerak.

Kimdir menga usb aloqasini yo'qotganligini bilishimga yordam berishi mumkinmi? Bu mening yondashuvim, usb aloqasi yo'qolib qolgan asosiy ko'chadan tekshirish mumkinmi? agar yo'qolgan bo'lsa, o'chirib qo'ying.

O'chirishning boshqa usullari bormi? kompyuter yoki kompyuterni o'chirishga ulanishni yo'qotganidan keyin.

Men bu kabi narsalarga yangicha javob beraman, agar bu savolga biror narsa noto'g'ri bo'lsa, meni kechiring.

6

5 javoblar

Ehtimol, sizning talabingizga mos keladigan echim 1 milodiy USB-xotira hodisalari yuz berganda to'xtab qolishi mumkin. Ushbu voqealarni ko'rib chiqish uchun sizning USB-kodingiz bilan bog'liq bo'lgan mantiq bo'lishi kerak, bu sizda kvadrat taymerni yo'qotishingiz mumkin. Agar u taymer vaqti tugab qolsa, siz VBUS hali ham mavjud bo'lsa ham, kompyuter endi USB-ni faol ravishda boshqarishini bilasiz.

2
qo'shib qo'ydi
@Chirs Stratton Sizning javobingiz uchun tashakkur, lekin men nazoratchi programmaga yangi, kontseptsiyani aniq bilib olmadim, agar to'g'ri bo'lsam, USB kvadrat hodisasi yo'qolgan yoki yo'qligini tekshirish uchun taymer kerak. Emasmi? Agar bu haqda biror ma'lumot berolmasangiz?
qo'shib qo'ydi muallif BI_Badger, manba

Ma'lumot sahifa ning 258-sahifasida:

• 0 - VBUS: VBus bayrog'i   Ushbu bitdan o'qilgan qiymat, vaziyatning holatini ko'rsatadi   VBUS PIN. Bu bit qurilmada mavjud   dasturning USB avtobusidagi ulanish holatini kuzatib borish rejimi. Qarang   22.10-bo'lim, 255 bet   Batafsil ma'lumot uchun.

255 sahifada:

22.10 Plug-inni aniqlash
  Quyidagi arxitektura asosida USB ulanishi VBUS pad tomonidan aniqlanadi:
    rasmni tavsifga yozing
  VBUS padining boshqaruv mantiqi VBUS bilan bog'liq signalni beradi   kuchlanish darajasi:
  • "Session_valid" uzatish faol   VBUS padidagi kuchlanish baland bo'lsa yoki   1.4V ga teng. 1.4V dan past bo'lsa, signal faol emas   • "Vbus_valid" signali faol bo'lsa, faol bo'ladi   VBUS padidagi kuchlanish 4,4V ga teng yoki yuqoriroq. 4.4V dan pastroq bo'lsa, signal faol emas   • VBUS statusi bit o'rnatilgan   VBUS "Vbus_" dan katta bo'lsa   yaroqli". VBUS holati biti o'chiriladi   VBUS pastga tushganda   "Session_valid" (histerizis xatti-harakati)   • VBUSI bayrog'i har bir VBUS bit holati o'zgarganda o'rnatiladi

Bu sizning izlayotgan narsa emasmi, lekin baribir uni chop etmoqchi ekanligim aniq emas.

2
qo'shib qo'ydi
Buyruqlar qanday yuboriladi? Sizning kompyuteringizda microcontroller bilan bog'laydigan yoki HyperTerminal yoki shunga o'xshash biror narsa yozganmi?
qo'shib qo'ydi muallif Jim, manba
Kondansatör yoki soat batareyasi, sozlagichni yopish uchun etarli darajada uzoq vaqt davomida kuch ishlatish uchun ishlatilishi mumkin.
qo'shib qo'ydi muallif Jim, manba
Agar siz C# ilovasini kalitni o'chirmasdan yopsangiz, sizda ishlashingizni ko'rib turadigan yana bir muammo. Ilova "offExit" buyrug'i "yopiq" deb yuborilganiga ishonch hosil qilishingiz mumkin.
qo'shib qo'ydi muallif Jim, manba
Programmers.stackexchange dasturiga borib, kompyuterning uyqu holatida yoki yo'qligini aniqlash uchun C# dasturida yo'l bor yoki yo'qligini so'rashni istardim. Agar shunday bo'lsa, u holda siz "sleep_mode == true" so'zini avtomatik ravishda off buyrug'i yuborish uchun mo'ljallangan interfeysga ega bo'lar edim.
qo'shib qo'ydi muallif Jim, manba
Javobingiz uchun sizga katta rahmat, men bu muammoni hal qila olaman deb o'ylayman, lekin mening kompyuterim uyqu holatida bo'lsa ham, USB batareyasi bilan ishlaydi. shuning uchun o'sha vaqtda kalitni o'chirib bo'lmaydi.
qo'shib qo'ydi muallif BI_Badger, manba
Men C# da foydalanuvchi interfeysini yaratdim, interfeysdan buyruqlarni yuborayapman va javobni nazoratchi orqali olaman.
qo'shib qo'ydi muallif BI_Badger, manba
Men yana bir bor shubha qilsam, agar USB ulanishi yo'qolgan bo'lsa, mikroto'lqinlift ishni to'xtatadi yoki USB ulanmasidan qat'i nazar kuch tugaguniga qadar ishlaydi.
qo'shib qo'ydi muallif BI_Badger, manba
Aksariyat kompyuterlar VBUSni operatsion tizim yopilsa ham saqlaydi. Shunday qilib, VBUSni tomosha qilish yechim emas. -1
qo'shib qo'ydi muallif Ali Chen, manba

usb aloqasini qanday qilib bilib olamiz?

Microcontroller qo'llanmasiga qarang, USB to'xtatib turish voqeasini qanday tutish kerakligi haqida ma'lumot bo'lishi kerak. Ushbu hodisa xost 3 milliondan ortiq qurilmani qurilma bilan aloqa o'rnatishni to'xtatganda paydo bo'ladi - hatto ramka voqealarini yubormaslik. USB qurilmalari bu holatda USB-ni kamaytirishlari kerak.

Shuni esda tutingki, haydovchi yoki nazorat qilish dasturi oddiygina o'ldiriladi, masalan, vazifa menejeri tomonidan. USB ramka hodisasi har bir millisekundga yuboriladi.

1
qo'shib qo'ydi
Yana bir bor shubha qilsam, agar USB ulanishi yo'qolgan bo'lsa, mikrokontroller ishlashni to'xtatadi yoki USB ulanmasidan qat'i nazar kuch tugaguniga qadar ishlaydi.
qo'shib qo'ydi muallif BI_Badger, manba
Bu OXning so'roviga yagona to'g'ri javob.
qo'shib qo'ydi muallif Ali Chen, manba
Uy egasining chindan ham ketib qolganligiga ishonch hosil qilish uchun qurilma ulanishni RESUMEga qo'yishga urinishi mumkin. Hech qanday javob bo'lmasa, uy egasi chindan ham o'likdir.
qo'shib qo'ydi muallif Ali Chen, manba

Agar siz USB aloqasini boshqarish uchun LUFA tizimini foydalanayotgan bo'lsangiz, u holda siz EVENT_USB_Device_Disconnect() hodisasidan foydalanib, kabelning jismoniy uzilishini aniqlab olishingiz mumkin (VBUSni aniqlashda Wallace belgilanishi bilan bir xil).

Chris Strattonning javobi har 1mSda olingan EVENT_USB_Device_StartOfFrame() orqali LUFA doirasida qo'llab-quvvatlanadi va tegishli protokol darajasidagi ulanishni aniqlash uchun ishlatilishi mumkin. Voqeani har safar yoqilganda, taymerni sozlash va taymerning to'kilganligini tekshiring - agar shunday bo'lsa, u holda qurilmangiz jismonan bog'langan, ammo muloqot qilmaydi.

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

Agar siz o'zingizni amalga oshirayotgan bo'lsangiz, LUFA manba kodidan va AVR uchun misollardan juda ko'p narsalarni bilib olishingiz mumkin.

1
qo'shib qo'ydi

Auditorga vaqti-vaqti bilan kompyuterni so'rashi va tasdiqlashni kutish uchun USB-maxsus bo'lmagan usul bo'ladi. N-so'rovlarni tasdiqlashsiz tekshirgandan keyin, aloqa yo'qolgan deb taxmin qilish mumkin.

0
qo'shib qo'ydi
@verendra: "USB-o'ziga xos emas" deb aytganda, men texnikada USB protokoli yoki USB apparatining o'ziga xos xususiyatlarini talab qilmasligini bildirdim. U RS-232, Ethernet, WiFi kabi har qanday aloqa kanali bilan ishlashi mumkin; bilishingiz yoki g'amxo'rlik qilishingiz kerak emas. Darhaqiqat, bizda uyali telefon aloqasi borligida og'zaki gaplashadigan narsa emasmi? Va ha, bu holatda, nazoratchi so'raydi va kompyuter javob beradi.
qo'shib qo'ydi muallif Ellie Kesselman, manba
Ha, agar tekshirgichga kuch yo'qotsa, unda siz qurilmangizni o'chira olmaydi. Muammo bo'lsa, zaxira yoki uzluksiz quvvat manbai kerak bo'ladi, bu hech bo'lmaganda nazoratni o'chirish uchun etarli darajada ishlaydi.
qo'shib qo'ydi muallif Ellie Kesselman, manba
Ehtimol, agar siz hali ham uni o'chirish uchun etarli kuchga ega bo'lsangiz, ha. Ammo, bu apparat uchun nisbatan oson.
qo'shib qo'ydi muallif Ellie Kesselman, manba
@verendra, bu men foydalanishim kerak bo'lgan yechim - ba'zi shaxsiy kompyuterlar yopilish vaqtida qo'llaniladigan quvvatni qoldirib, bu ham sizning dasturiy ta'minotingizni tekshiradi. U faqatgina OK? ni kompyuteringizga yuborganingiz kabi yangisini qo'shgan buyruqlarni alohida ajratadi va sizning ilovangiz YES ga javob beradi. Agar biror narsa javobsiz qolsa, biror narsa noto'g'ri ekanini bilsangiz (yoki kompyuter yopilganda) va bir muddatdan so'ng chiqishni o'chirib qo'yishingiz mumkin.
qo'shib qo'ydi muallif Timo002, manba
@verendra, ha bu to'g'ri. Javobni Chris Stratton sizning dasturiy ta'minotingizni tekshirishga hojat bo'lmasa, OK-da ishlaydi.
qo'shib qo'ydi muallif Timo002, manba
Buni qanday amalga oshirish kerakligini aniqroq tushuntirib bera olasizmi, USB-ning maxsus usuli, USB-ulanishni tekshirishsiz o'ylaydi degan ma'noni anglatadi. Buni qanday amalga oshirishingiz mumkin?
qo'shib qo'ydi muallif BI_Badger, manba
@JRobert Men USB ulanishi yo'qolsa ham, men qurilmani o'chira olamanmi, men tekshiruvchiga uzluksiz quvvat manbai bo'lsa? SPI aloqasidan foydalanib, qurilmamni almashtirish kerak.
qo'shib qo'ydi muallif BI_Badger, manba
@JRobert Men yana bitta shubha qilaman. Agar USB ulanishini yo'qotib qo'ysam, mikrokontroller ishlamay qolishi yoki USB ulanishidan qat'i nazar kuch tugaguniga qadar ishlaydi.
qo'shib qo'ydi muallif BI_Badger, manba
@PeterJ Bu erda men kompyuterdan (c # interfeysi) buyruqlarni yuboraman va nazorat qiluvchi bu komandalarga javob beradi. Sizning nuqtai nazaringizdan Controller'dan buyruq yuborish kerakmi? kompyuterdan emasmi? emasmi?
qo'shib qo'ydi muallif BI_Badger, manba