Biz o'z dasturingiz bilan yuklab olish uchun eng oddiy USB qurilmasini yaratamiz.

topshirish / Men tozalovchi joy quraman


Golovna

1-rasm USB Xost va Aksessuar rejimlarida o'rnatilgan Android robotining tasviri (http://developer.android.com saytidan olingan rasm)

Shunisi e'tiborga loyiqki, USB ulanishi bir xil qurilmaga ulanishning yagona usuli emas.

Android tarmoq, NFC, Wi-Fi P2P, SIP, shuningdek, standart ulanishlarga imkon beradi.

Ma'lumot uzatish uchun USB-dan foydalanish haqida gapirganda, P. Agurovning "USB interfeysi" kitobini esga olish kerak. Von, 2006 yilda oxirgi marta nashr etilgani uchun tez-tez tanqid qilingan bo'lsa-da, bir necha bor ushbu texnologiyaning turg'unligining turli jihatlari haqida ma'lumot qidirishda to'g'ri echimlarni topishga yordam berdi.

Kitob quyidagilarni o'z ichiga oladi: mikrosxemalar va boshqaruvchi uchun sxemalar dizaynini tanlashdan tortib, kompyuterning yon tomonidagi USB protokoli orqali ma'lumotlarni uzatish uchun mikrokontroller dasturlari va ilovalarini yozishgacha.

Ushbu quvvat manbaidan olingan "birinchi qo'l" ma'lumotlarini - ushbu interfeysning texnik xususiyatlarini ishlab chiqish bilan shug'ullanadigan USB IF (USB Implementers Forum) notijorat tashkilotining veb-saytini eslatib o'tmaslik mumkin emas.

, ammo bu material ingliz tilida.

Nima uchun HID klassi turli xil o'ziyurar qurilmalar ishlab chiqaruvchilari tomonidan juda yoqadi?

Vikipediyadan iqtibos: “Klassik kiritish qurilmalarining (masalan, klaviatura va ayiqchalar) batafsil tavsiflaridan tashqari, HID standarti batafsil spetsifikatsiyalarsiz qurilmalarning maxsus sinfini belgilaydi.

Ushbu sinf USB HID Consumer Control deb ataladi va asosan qurilmaga ulanadigan tartibga solinmagan kanalga ega.

Bunday holda, qurilma operatsion tizim uchun ayiq va klaviatura kabi bir xil standart drayverlardan foydalanadi.

Shunday qilib, siz eng ilg'or kompyuter operatsion tizimlari uchun maxsus drayverlarni yaratish va o'rnatishni talab qilmaydigan USB qurilmalarini yaratishingiz mumkin.


2-rasm Ikkilamchi USB kabeli va OTG kabelining elektron diagrammasining ahamiyati (http://tech.firstpost.com saytidagi rasm)

Qurilmangiz uchun bunday OTG kabeli lehimli va mustaqil bo'lishi mumkin.

Buning uchun siz elektr rozetkasini va muallifni radio do'konidan sotib olishingiz kerak, masalan, eski kabelni portativ qattiq diskdan olib tashlash:

Google Play Marketdan o'rnatilgan USB Device Info dasturi ham katta yordam beradi.


Dastur qo'shimcha Java API va qo'shimcha Linux yadrosi yordamida planshet/telefonning USB ulagichiga ulanishi mumkin.

Shunday qilib, agar qurilmangiz USB Device Info-da qo'shimcha Java USB Host API uchun ro'yxatdan o'tmagan bo'lsa, qo'shimcha Java va USB Host API-dan foydalangan holda mobil qurilmangiz uchun (jumladan, o'zingizniki) Android dasturidan foydalanish yaxshi fikr bo'lishi mumkin. .

Ba'zan Linux operatsion tizimining lsusb buyrug'i tomonidan chiqarilgan ma'lumotlar ham juda qiziq.

-v va -d lsusb tugmalari yordamida USB qurilmasi haqidagi hamma narsani yoki hatto ushbu toifadagi qurilmalar uchun dasturiy ta'minot ishlab chiqaruvchisi uchun zarur bo'lgan hamma narsani ko'rsating (3-rasm).

3-rasm lsusb va lsusb -v -d buyruqlariga misol

Keyinchalik, Android SDK-ni kompyuteringizga o'rnatishingiz va Eclipse ishlab chiqish mexanizmini (IDE) ADT plagini bilan birlashtirishingiz kerak (garchi siz SDKsiz ham qila olasiz).

Android uchun dastur yaratish va o'rnatishni o'rganishingiz mumkin, masalan, Internetda. Albatta, men hech qanday yo'lsiz natijalarga erishishni juda xohlayman va kerak!
Shuni ta'kidlaymanki, Android-da USB-ning ba'zi texnik jihatlarini tushuntirish uchun muallifga juda ko'p ma'lumotlar kerak edi. Android API-da USB-ga ega robotlar uchun ajoyib Java
Shuningdek, Android uchun USB Host API distribyutorlarining veb-saytlarida qanday harakat qilish kerak (div.) - "Avvalo, ishda qaysi sinflardan foydalanishni tushunish muhimdir."
1-jadval USB Host API bilan ishlash uchun eng muhim sinflarning tavsifini o'z ichiga oladi (ma'lumotni http://developer.android.com dan uzatishga harakat qiling). Jadval 1. Androidda USB bilan ishlash uchun sinflarning tavsifi
Sinf nomi
Tavsif Qurilma uchun o'rnatilgan funksionallikni belgilaydigan USB qurilma interfeysini o'rnating.
Qurilmada muloqot qilish uchun bir yoki bir nechta interfeys bo'lishi mumkin.
Ushbu qurilma uchun funktsiyalar to'plamini belgilaydigan USB qurilmasiga interfeysni ifodalaydi. Bitta qurilma bir yoki bir nechta ma'lumot almashish interfeysiga ega bo'lishi mumkin.
USBEndpoint
Ushbu sahifa uchun aloqa kanali bo'lgan so'nggi nuqta funktsiyasini ifodalang. Bo'limning bir yoki bir nechta uchlari bo'lishi mumkin va u bilan birlashtirishning ikkita usuli uchun kirish va chiqish nuqtalari bo'lishi mumkin.
Ushbu interfeys uchun bog'lovchi kanal bo'lgan interfeysning oxirgi nuqtasini ifodalaydi.
Interfeys bir yoki bir nechta so'nggi nuqtalarni qo'shishi va ma'lumotni olish va uzatish uchun so'nggi nuqtalarni belgilashi mumkin. USBDeviceConnection
Ma'lumotni oxirigacha uzatadigan qurilmaga ulanish o'rnatilgan.
Ushbu turkum sizga sinxron yoki asinxron ravishda oldinga va orqaga qaytish imkonini beradi. Men bu "bog'lanish" ni bunga qo'shaman.
Ma'lumotni oxirgi nuqtaga o'tkazish kerak.

Bu sinf sizga ma'lumotlarni olish yoki sinxron yoki asinxron ravishda uzatish imkonini beradi.

USB so'rovi

Ular UsbDeviceConnection orqali qurilma bilan aloqa qilish uchun asinxron quvvat manbaini ifodalaydi.

Eclipse-da loyiha qo'shimcha menyu elementi File->New->Android Application Project yordamida yaratiladi.


Shuni ham yodda tutingki, Android SDK (papka android sdk namunalari/android-N(API Level)/USB) bilan birga kelgan ilovalardagi yozuvlar ostidagi kod USB o'yinni boshqarish dasturi haqidadir Missile Launcher (bo'lim. Fig.). 4) Ilova dasturlari Android SDK menejeri orqali yuklab olinadi (siz elementni tanlashingiz kerak - SDK uchun namunalar).

Quyida joylashgan ro'yxatlarda kodda so'ralayotgan narsaning mohiyatini tushuntiruvchi izohlar mavjud.

4-rasm Qiziqarli o'yinchoq "Raketani uchirish"

Loyihani yaratishda minimal talab qilinadigan SDK parametrida kerakli API darajasini tanlashni unutmang (Android 3.1 /Honeycomb/ yoki undan yuqori versiyasini ifodalovchi API darajasi 12).
Loyiha juda oddiy backend interfeysiga ega bo'ladi - asosiy oyna (Faoliyat) va ma'lumotni ko'rsatish uchun TextView.
Shu kabi loyiha tomonidan ko'rib chiqildi.
Loyihamiz faoliyati uchun avtomatik sinf yaratgandan so'ng, USB-dan ishlash uchun quyidagi sinflar misollarini aniqlash kerak:
xususiy TextView lgView;

shaxsiy UsbManager mUsbManager; shaxsiy UsbDevice mDevice;

shaxsiy UsbDeviceConnection mConnection;

shaxsiy UsbEndpoint mEndpointIntr; LGView

= (TextView) findViewById(R.id .logTextView );

UsbManager sinfiga kirishni rad etishimiz mumkin

MUsbManager
= (UsbManager) getSystemService(Kontekst .USB_SERVICE );

OnResume() ostida namuna oluvchi yaratamiz.
Iltimos, shuni esda tutingki, qurilmani ulash haqidagi ma'lumotlar dasturimiz oynasi faollashtirilganda yangilanadi (bo'lim. Listing 1).< String , UsbDevice>Listing 1. Pod sampler onResume()
public void onResume() (< UsbDevice>super .onResume();

//Konteynerni qurilmalar ro'yxati bilan to'ldiring

HashMap
deviceList = mUsbManager.getDeviceList();

Iterator
deviceIterator = deviceList.values() .iterator() ; lgView.setText("Qurilmalar soni:" + deviceList.size());
}
while (deviceIterator.hasNext() ) (
UsbDevice qurilmasi = (UsbDevice) deviceIterator.next();
//Mahsulot identifikatori qo'shiladi
\n" deviceIterator = deviceList.values() .iterator() ;+ "Device ProductID: " + device.getProductId() );
//filtrning tavsiflarini bildiradi

// AndroidManifest.xml nomi
Niyat niyati = getIntent();
lgView.setText(lgView.getText() + "
+ "niyat:" + niyat);
String harakati = intent.getAction();
\n" deviceIterator = deviceList.values() .iterator() ; + //qurilma ulanganda, xabar yuboriladi) ;
) aks holda (UsbManager.ACTION_USB_DEVICE_DETACHED .teng (harakat) ) (
agar (mDevice != null && mDevice.equals (qurilma) ) (
setDevice(null);
\n" deviceIterator = deviceList.values() .iterator() ; + "UsbManager.ACTION_USB_DEVICE_DETACHED.equals(harakat) TRUE") ;
}
}

Keyinchalik, qurilmamiz bilan ishlash uchun zarur bo'lgan Activity uchun setDevice() funksiyasini yaratishimiz mumkin (bo'lim. Listing 2).

OnResume() funksiyasi va setDevice() funksiyasida biz oldingi bo'limda tasvirlangan USB Host API-ni o'rnatish algoritmini aniq belgilab oldik.

Listing 2. setDevice() funksiyasi
\n" deviceIterator = deviceList.values() .iterator() ; xususiy void setDevice(UsbDevice qurilmasi) (

+ "setDevice" + qurilma);
//Qurilma uchun yaroqli interfeyslar

agar (device.getInterfaceCount()!=1) ( deviceIterator = deviceList.values() .iterator() ; LgView.setText(lgView.getText() + "
+ "interfeys topilmadi"));
}
qaytish;

UsbInterface intf = device.getInterface(0);
//Qurilmaning oxirgi nuqtalarini aniqlang

agar (device.getInterfaceCount()!=1) ( deviceIterator = deviceList.values() .iterator() ; agar (intf.getEndpointCount() == 0 ) (
+ "interfeys topilmadi"));
+ "oxirgi nuqta topilmadi");
\n" deviceIterator = deviceList.values() .iterator() ;) boshqa (
}

+ "Oxirgi nuqtalar soni:" + intf.getEndpointCount());
UsbEndpoint epIN = null;

UsbEndpoint epOUT = null;
//Uzilishlar orqali uzatish uchun oxirgi nuqtalarni toping< intf.getEndpointCount () ; i++ ) {
uchun (int i = 0; i
agar (intf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_INT) (
agar (intf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN) (
\n" deviceIterator = deviceList.values() .iterator() ; epIN = intf.getEndpoint(i);
}
+ "IN endpoint:" + intf.getEndpoint(i) );
boshqa(
\n" deviceIterator = deviceList.values() .iterator() ; epOUT = intf.getEndpoint(i);
}
+ "OUT oxirgi nuqta:" + intf.getEndpoint (i) ); deviceIterator = deviceList.values() .iterator() ; + ) boshqa ( lgView.setText ( lgView.getText() + ") ; }
}

"INTERRUPT_TRANSFER uchun belgilamang"
MDDevice = qurilma;

mEndpointIntr = epOUT;
//ma'lumot uzatish moslamasini ochadi
agar (qurilma != null ) (
UsbDeviceConnection ulanishi = mUsbManager.openDevice (qurilma) ;

agar (device.getInterfaceCount()!=1) ( deviceIterator = deviceList.values() .iterator() ; agar (ulanish != null && connection.claimInterface (intf, true ) ) (
+ "qurilmani oching SUCCESS!"

);

agar (device.getInterfaceCount()!=1) ( deviceIterator = deviceList.values() .iterator() ; mConnection = ulanish;
) boshqa (
}
}
}
}

+ "qurilma ochilmadi!"

);

mConnection = null;
Hurmatli o'quvchi aytganidek, ma'lumotlarni qabul qilish va uzatish uchun qurilmani ochadigan kiritilgan kodga qo'shimcha ravishda, ma'lumotlar almashinuvi protokoli endi talab qilinmaydi, bu, takror aytaman, chakana sotuvchining yaxshi bilimi bilan bog'liq.
Shuningdek, aniqlanishi bilan biz HID qurilmasiga yuboriladigan va vikorist xabarining ma'lumotlar paketini o'rnatadigan va uzatishni to'xtatadigan kodni, UsbRequest sinfini va yakuniy yakuniy nuqta - divni ko'rsatamiz. Ro'yxat 3.

\n" deviceIterator = deviceList.values() .iterator() ; Listing 3. Qurilmadagi ma'lumotlarni majburlash uchun kodning tugmasi

//Yuborish uchun bufer hajmini o'rnating

UsbRequest so'rovi = Yangi UsbRequest() ;

buffer.put(xabar);

request.initialize(mConnection, mEndpointIntr);

request.queue(bufer, buferDataLength);

agar (request.equals(mConnection.requestWait()))

// topshirish muvaffaqiyatli bo'ldi
//lgView.setText(lgView.getText() + "\n" + "CLEAR yuborilmoqda!!!");

catch (istisno istisno)

// bu to'g'ri emas ...
//lgView.setText(lgView.getText() + "\n" + "yuborish aniq emas...");

AndroidManifest.xml da qurilmalarni filtrlash

Bizning ilovamiz ma'lum VID (Vendor-ID) va PID (Product-ID) bo'lgan ma'lum bir qurilmani qidirishni talab qilmasa ham, Google muhandislari manifest faylida maqsad-filtr bo'limisiz dastur ilovalarini yaratmaydilar va muallif AndroidManifest.xml-da qurilmalarni filtrlashsiz robot dasturlarini yoqish mumkin emas.

Eslatib o'taman, Vendor-ID va Product-ID USB qurilmalarining noyob identifikatorlari hisoblanadi.

Keyin, filtrlashdan foydalanib, siz ma'lum bir qurilma yoki boshqa qurilmalar sinfi bilan o'zaro ta'sir qiladigan dastur yaratishingiz mumkin.

Qurilma ishlab chiquvchilari raqamlarni USB IF bilan rozi qilishlari shart.


" > Bundan tashqari, 4-listingda ko'rsatilgan manifest fayli va 5-listingda aqliy filtrlash bilan fayl, masalan, mobil qurilmaga, USB flesh-disklarga ulanishlarni muvaffaqiyatli taniydi, lekin klaviatura va sichqonchani tanimaydi Va muallifda nima bor?
> Ushbu dasturni chiqish kodi bilan birga ko'rsatmalar uchun yuklab olish mumkin.
Listing 4. AndroidManifest.xml fayli
http://schemas.android.com/apk/res/android"


paket = "uk.learn2prog.usbhostexample"
android:versionCode="1"


android:versionName="1.0" >
android: minSdkVersion="12"
android:targetSdkVersion="14" />
android:allowBackup="true"

android:icon="@drawable/ic_launcher" android:label="@string/app_name"
android:theme="@style/AppTheme" >
>

android:name= />

"ru.learn2prog.usbhostexample.MainActivity" />

>

>

>
android: label="@string/app_name" >
"android.intent.category.DEFAULT"
>
>

>

"android.intent.category.LAUNCHER"

>

>

"android.hardware.usb.action.USB_DEVICE_ATTACHED"

android: resource="@xml/device_filter" />
12.
Listing 5. Filtr fayli device_filter.xml (/res/xml katalogi)
Bizning dasturlarimizning katlanmış va o'rnatilgan dasturlari operatsiyalari odatdagidan farq qilmaydi (, ichida g'ayrioddiy ilovalar).

USB shinasi (Universal Serial Bus - universal seriyali avtobus) 1996 yil 15 iyunda paydo bo'ldi, standartning birinchi versiyasi kompaniyalar - Intel, DEC, IBM, NEC, Northen Telecom va Compaq tomonidan tasdiqlangan.

Meta standartning asosiy maqsadi chakana sotuvchilarga periferik qurilmalar bilan Plug & Play rejimida ishlash imkonini berishdir.

Bu shuni anglatadiki, qurilma ishlaydigan kompyuterga ulanish, tegishli drayverlarni ulash va o'rnatishdan so'ng uni avtomatik ravishda tanib olish uchun javobgardir.

Bundan tashqari, shinaning o'zidan past bosimli qurilmalarning hayotiyligini ta'minlash kerak.

Avtobusning suyuqligi eng muhim periferik qurilmalar uchun etarli. Kompyuterning IBM PC ichki avtobuslarida resurs tanqisligi muammosini hal qilish uchun USB-kontroller qurilma avtobusiga ulanishlar sonidan qat'iy nazar yana bir uzilishni olishi kerak. Deyarli barcha qurilmalar USB standartini qabul qildi va 1997 yil bahorida kompyuterlar USB qurilmalarini ulash uchun ulagichlar bilan paydo bo'la boshladi.

USB infektsiyasi kompyuterning periferik ishlab chiqaruvchilari orasida tobora ommalashib bormoqda, masalan, Apple Computers kompaniyasining iMAC kompyuterida tashqi avtobus sifatida faqat USB mavjud.

USB 1.0 ning imkoniyatlari quyidagilardan iborat: Kompyuterning IBM PC ichki avtobuslarida resurs tanqisligi muammosini hal qilish uchun USB-kontroller qurilma avtobusiga ulanishlar sonidan qat'iy nazar yana bir uzilishni olishi kerak. Deyarli barcha qurilmalar USB standartini qabul qildi va 1997 yil bahorida kompyuterlar USB qurilmalarini ulash uchun ulagichlar bilan paydo bo'la boshladi.

1. ma'lumotlar almashinuvining yuqori tezligi (to'liq tezlikda) - 12 MB

bu

/bilan;

2. Yuqori tezlikdagi kabel uchun maksimal ruxsat 5 metr;

3. past ma'lumot almashish tezligi (past tezlikda) - 1,5 MB
4. past tezlikda almashinuv uchun kabelning maksimal kengaytmasi 3 metr;
5. ulangan qurilmalarning maksimal soni – 127 ta;

6. Turli valyuta kurslaridan foydalangan holda qurilmalarni bir zumda ulash mumkin;

8. Bitta qurilma uchun maksimal oqim tezligi 500 mA.

Bu erda GND tashqi qurilmaning periferik qurilmalarning ishlash muddati, Vbus - +5 va hayot lancugidir.
D+ shinasi shinada maʼlumotlarni uzatish uchun, D-shinasi esa maʼlumotlarni qabul qilish uchun moʻljallangan.
To'liq tezlikda avtobus tezligini saqlab turish uchun kabel o'ralgan juftlik kabi o'ralgan, ekran bilan himoyalangan va minimal tezlik rejimida (past tezlikda) ishlash uchun buralishi mumkin.

Minimal tezlikda ishlash uchun kabel (masalan, sichqonchani ulash uchun) himoyalanmagan bo'lishi mumkin.

Periferik qurilmalarni ulash uchun ishlatiladigan rozetkalar ketma-ket bo'linadi: "A" seriyali rozetkalar (vilka va rozetka) kompyuter kabi qurilmaga ulanish uchun tan olinmaydi, "B" seriyali rozetkalar (vilka va rozetka) ) faqat periferik qurilmaga ulanish uchun.

USB ulanishlari 2.6.1-jadvalda ko'rsatilgan kontaktlarning boshqa raqamlanishiga ega bo'lishi mumkin.
2.6.1-jadval – USB kontaktlarning belgilangan yorlig'i

1999 yilda USB avtobus standartining birinchi versiyasini ishlab chiqishni boshlagan kompyuter kompaniyalarining bir xil konsortsiumi qo'shimcha yuqori tezlik rejimini joriy etishni qo'llab-quvvatlaydigan USB 2.0 versiyasini faol ravishda ishlab chiqishni boshladi.

Avtobusning o‘tkazish qobiliyati 40 marta, 480 Mbit/s gacha oshirildi, bu esa USB orqali videoma’lumotlarni uzatish imkonini berdi.

Ilgari chiqarilgan tashqi qurilmalar va yuqori tezlikdagi kabellarning narxi to'liq tejaladi.

2. HID (Human Interface Device) qurilmalari deb ataladigan USB qurilmalarining maxsus sinfining interfeysidan foydalaning.

Birinchi usul universaldir: drayverlarni yozish sohasida etarli bilimga ega bo'lsangiz, robotni istalgan USB qurilmasidagi istalgan qurilma bilan dasturlashingiz mumkin.

Ale tse dosit skladne zavdannya.

Yana bir usul tajovuzkor.

Amaldagi operatsion tizimlar kompyuter-inson aloqa qurilmalari yoki HID qurilmalari uchun interfeysni qo'llab-quvvatlaydi, masalan:

1. klaviatura, sichqoncha, joystik;

2. turli sensorlar va o'quvchilar;

3. O'yin rulini boshqarish va pedallar;

4. tugmalar, kalitlar, regulyatorlar.

HID qurilmalarining imkoniyatlariga ega bo'lgan har qanday qurilma tizim tomonidan avtomatik ravishda tan olinadi va maxsus drayverlarni yozishga hojat qolmaydi.

Ushbu ilovada ma'lumotlarni uzatishning past tezligi boshqa hollarda normal ishlash uchun etarli bo'ladi, qurilma hatto imkon qadar tezroq ma'lumotlarni uzatishga qodir bo'lishi mumkin;

USB 1.0 avtobusining 12 Mbit/s yuqori tezligi bilan solishtirganda qurilmaning bosh-end HID-versiyasining past uzatish tezligi ma'lum bir USB-ni tanlashda HID texnologiyasining ajoyib minusiga o'xshaydi. -haqiqat izatsii.

Biroq, turli xil aloqa vazifalari uchun talab qilinadigan tezlik butunlay HID arxitekturasiga bog'liq bo'lib, u ma'lumotlar almashinuvini tashkil etish usullari orasida o'z o'rnini egallagan maxsus vositadir.

HID qurilmalarining ikki turi mavjud: ishtirok etadiganlar (egasi) va qismni asl kompyuterdan oladiganlar.

Zamonaviy USB-HID qurilmasining eng qiziqarli qismi bu klaviatura bo'lib, uning ishi kompyuter ishga tushganda boshlanadi.

HID qurilmasini loyihalashda spetsifikatsiya tomonidan yuklangan quyidagi imtiyozlarni ta'minlash kerak:

1. Barcha yangi HID qurilmalari har soniyada 64 000 bayt yoki har 1 msda 64 bayt uzatishi mumkin;

Past tezlikda ishlaydigan HID qurilmasi soniyada 800 baytgacha yoki har 10 ms dan 8 baytgacha uzatishi mumkin.

2. HID qurilmalari o'zlarining uzatish chastotasini oxirgi uzatish ma'lumotlaridagidan farq qilishi mumkin.

3. HID qurilmasi bilan ma'lumotlar almashinuvi hisobot deb ataladigan maxsus tuzilma yordamida amalga oshiriladi.

Teri hisoboti 65 535 baytgacha ma'lumotlarni o'z ichiga olishi mumkin.

Windows USB HID qurilmalarini qo'llab-quvvatlaydigan dasturlarni yozish uchun kerakli hid* sarlavha fayllari WDK (Windows Driver Kit) ga kiritilgan yoki siz keng tarqalgan yoki shunga o'xshash yashirin kutubxonadan foydalanishingiz mumkin.

Shunday qilib, bu holda, USB dasturlash apparat ta'minoti va operatsion tizim drayverini yozish bilan maxsus mikrokontrollerni talab qiladigan murakkab vazifalarni talab qiladi.

Biroq, qurilmalarni ishlab chiqish amaliyotida HID qurilmalarining interfeysini ancha soddalashtirish mumkin, uni qo'llab-quvvatlash standart tizim drayveri bilan bir xil darajada amalga oshiriladi va boshqa kutubxona funktsiyalari yordamida dasturlash osonroq.

  1. Oziq-ovqatlarni nazorat qilish
  2. USB ning D- va GND portining qiymati qanday?
  3. Nega signalga hayot berish uchun bir uyquli dritni vikorist qilish mumkin emas?
  4. Bugungi kunda nechta USB tezligi rejimi mavjud (jumladan, 3.0 versiyasi)?
  5. HID qurilmasi nima?

Nima uchun drayverlarni bugungi operatsion tizimlarda yozishni talab qilmaydi?

Interfeys uchun o'rnatilgan yordamga ega bo'lmagan qo'shimcha mikroprotsessor orqasida USB qurilmalarini amalga oshirish mumkinmi?
Keyingi versiyalarda USB 3.0 ning asosiy xususiyatlari qanday?
Bu yaxshi kitob, u ko'p narsani tushuntiradi.
Bu USB shinasi orqali ma'lumotlar qanday uzatilishini tushunmoqchi bo'lganlar uchun foydali bo'ladi.
Kirish 1
Bu kitob kim uchun: 2
2-kitobda nimani topasiz
Dasturiy ta'minotning afzalliklari 3
Uskuna afzalliklari 4
Dastur kodi haqida 4
4-bo'limlarning qisqacha tavsifi
Poznachennya 6
Podyaki 7
I QISM. USB 9GA KIRISH
1-bo'lim. USB 11 nima
1.1.
USB 11 tarixi
1.2.
USB-ni boshqa interfeyslar bilan yangilash 14
1.3.
USB 16 haqida asosiy tushunchalar
1.3.1.
16-avtobusning tashqi arxitekturasi
1.3.2.
16-avtobusning jismoniy va mantiqiy arxitekturasi
1.3.3.
Saqlash USB 18
1.3.4.
USB qurilmalarining quvvati 18
1.3.5.
Hublarning kuchi 19
1.3.6.
Xost kuchi 20
1.4.
USB qurilmalari 20
1.4.1.
Misha bu klaviatura., 21
1.4.2.
Monitoring 21
1.4.3.
USB-to-COM va USB-to-LPT 22 adapterlari
1.4.4.
1.7.2.
Muammolarni hal qilish 41
1.8.
USB 45 interfeysi
1.9.
Kompyuter sotib olganingizda 46
1.9.1.
HS va USB 2.0 - bir xil emas!
46
1.9.2.
Tizim platasi 47
1.9.3.
48-bino
1.9.4.
"Eski" kompyuter modellari uchun USB 48
1.10.
Ushbu bo'limgacha bo'lgan Internet resurslari 49
2-bo'lim. USB apparat 51
2.1.
Kabellar va ulagichlar 51
2.1.1.
Kabel turlari 52
2.1.2.
Dovjina kabeli 53
2.1.3.
Roz'emi 53
2.2.
Jismoniy interfeys 55
2.2.1.
O'lponlar kodeksi 57
2.2.2.
Qurilma identifikatsiyasi 58
2.3.
Xarchuvannya 59
2.3.1.
USB qurilmalari turlari 59
2.3.2.
Energiya boshqaruvi 60
2.3.3.
Kam energiya rejimini kiritish 61
2.4.< 84
Ushbu bo'limgacha bo'lgan Internet resurslari 61
II QISM.
ICHKI TASHKIL USB 63
3-bo'lim. 65-avtobusning ichki tashkil etilishi
3.1.
Mantiqiy ma'lumotlar almashinuvi 65
3.1.1.
Mijoz dasturiy ta'minoti xavfsizligining kamligi 66
3.1.2.
USB tizimi drayveri 67
3.1.3.
Interfeys 68 uchun xost boshqaruvchisi darajasi
3.1.4.
Periferik qurilma shinasi 68
3.1.5.
Mantiqiy USB qurilmaning noyobligi 69
3.1.6.
USB qurilmaning funksional darajasi 69
3.2.
Ma'lumotni darajalardan tashqariga uzatish 69
3.3.
Tipi danih 71
3.4.
Izoxron uzatish vaqtida sinxronlash 73
3.5.
Qadri 77
3.6.
Yakuniy nuqta 78
3.7.
Kanallar 79
3.8.
6.3.
OTG qurilma deskriptori 139
6.4.
Ushbu bo'limgacha bo'lgan Internet resurslari 140
III QISM.
DASTURLASH AMALIYATI 141
7-bo'lim. Windows 143 uchun USB-quvvatlash
7.1.
Model WDM 144
7.2.
USB drayveri bilan o'zaro aloqa 146
8-bob. HID qurilmalari *149
8.1.
HID-qo'shimchasining kuchi 149
8.2.
HID qurilmasi bilan ma'lumotlarni qanday almashish mumkin 151
8.3.
HID-qo'shimchasini o'rnatish 152
8.4.
Qurilma identifikatsiyasi HID 152
8.4.1.
Nopok qurilmalarni aniqlash 153
8.4.2.
HID 153 qurilma konfiguratsiyasi deskriptori
8.4.3.
HID deskriptori 154
8.4.4.
Hisobot deskriptori 156
8.5.
Hisobot deskriptorining tuzilishi 156
8.5.1.
Hisobot elementlarining tuzilishi 156
8.5.2.
Hisobot elementlarining turlari 157
8.5.3.
Deskriptorlarni qo'llash 165
8.6.
HID 168 kengaytmasini quvvatlang
8.6.1.
GET_REPORT kiriting.
169
8.6.2.
SET_REPORT 169 ni yozing
8.6.3.
GETJDLE-ni kiriting.
170
8.6.4.
SETJDLE 170 tomonidan quvvatlanadi
8.6.5.
GET_PROTOCOL 171 ni kiriting
8.6.6.
SET_PROTOCOL 171 ni yozing
8.7.
Asboblar 171
8.8.
HID drayveri 172 bilan o'zaro aloqa
9-bo'lim. WDM 181 ga kirish
9.1.
Haydovchilar 183
9.2.
Qurilmalarning ramziy nomlari 184
9.3.
WDM drayverining asosiy protseduralari 189
9.3.1.
DriverEntry 190 protsedurasi
9.3.2.
AddDevice 192 protsedurasi
9.3.3.
10.4.12.
Qo'shimcha INF fayli yordamida qurilmalarni o'rnatish 248
10.5.
USB 249 uchun ro'yxatga olish kitobi yorliqlari
11-bo'lim. BIOS funktsiyalari 251
11.1.
Xizmat BIOS 1AN 251
11.1.1.
Funktsiya B101H - PCI BIOS 252 tayinlash
11.1.2.
V102N funktsiyasi - identifikatorlar uchun PCI qurilmasini qidirish
kengaytma va virobnik 253
11.1.3.
Funktsiya B103N - 254 sinf kodi bilan PCI qurilmasini qidiring
11.1.4.
B108N funktsiyasi - konfiguratsiya registrini o'qish (bayt) 255
11.1.5.
VU9N funktsiyasi - konfiguratsiya registrini o'qish (Word) 256
11.1.6.
B10AN funktsiyasi - konfiguratsiya registrini o'qish (DWord) 256
11.1.7.
B10BN funktsiyasi - konfiguratsiya registrini yozish (bayt) 257
11.1.8.
B10CH funktsiyasi - konfiguratsiya registrini yozish (Word) 257
11.1.9.
Funktsiya B10DH - Konfiguratsiya registrini yozish (DWord) 258
11.2.
Vikoristanny dumba 259
IV QISM.
USB QURILMA 283
12-bo'lim. USB tashqi qurilmalar 285
12.1.
Atmel 286 chiplari
12.1.1.
MSC-51 286 arxitekturali mikrokontrollerlar
12.1.2.
Hub kontrollerlari 289
12.1.3.
AVR 289 yadroli mikroprotsessor markazlari
12.1.4.
Boshqa mikrosxemalar Atmel 290
12.2.
Cygnal 291 chiplari
12.2.1.
C8051F320 va C8051F321 mikroprotsessorlari 291
12.2.2.
Boshqa mikrosxemalar Cygnal 293
12.3.
FTDI 296 mikrosxemalari
12.3.1.
FT232AM va FT232BM 297 mikrosxemalari
12.3.2.
FT245AM va FT245BM 298 mikrosxemalari
12.3.3.
FT2232BM 299 mikrosxema
12.3.4.
Chip FT8U100AX 300
12.3.5.
Sharbat to'plamlari va modullari 301
12.3.6.
Haydovchi 302
12.3.7.
Qo'shimcha kommunal xizmatlar 303
12.3.8.
Boshqa modullar 304
12.4.
13.5.
Mikroprotsessor 349 uchun dastur
13.5.1.
AT89S5131 349 uchun dasturning birinchi versiyasi
13.5.2.
Qator deskriptorlarini qo'shish 369
13.5.3.
Yakuniy nuqtalarni qo'shish 374
13.5.4.
HID kengaytmasi 377 uchun shlyuz
13.5.5.
HID qurilmasi bilan aloqa 381
13.6.
Windows 388 da hisobotlarni o'qish
13.7.
Windows XP 396 ning qo'shimcha funktsiyalari
13.8.
Ko'p hisobotli qurilma 397
14-bo'lim. ATMEL AT89C5131 402 asosida USB qurilmasini yaratish
14.1.
He-HID qurilmasi 402
14.2.
Driver Studio 405 yordam uchun drayverni yaratish
14.2.1.
Driver Studio 407 kutubxonasi haqida bir necha so'z
14.2.2.
Boshqa sinflar Driver Studio 411
14.2.3.
Driver Studio 412 yordam uchun haydovchi shablonini yarating
14.2.4.
Haydovchi shablonni to'ldirish 422
14.2.5.
Sinfni biriktirishning asosiy usullari 423
14.2.6.
Ma'lumotlarni o'qishni amalga oshirish 426
14.2.7.
428 drayverini o'rnatish
14.2.8.
Ma'lumotlarni o'qish dasturi 429
14.2.9.
Boshqa turdagi terminal nuqtalaridan ma'lumotlarni o'qish 438
14.2.10.
"Toza" USB drayveri 439
15-bo'lim. FTDI 457 mikrosxemalarining o'zgarishi
15.1.
FT232BM 457 funktsional diagrammasi
15.2.
FT232BM 460 sxemasi dizayni
15.3.
D2XX 460 funksiyalari
15.4.
COM-dan USB 465-ga o'tish
15.4.1.
Qayta loyihalash sxemalarining tavsifi 465
15.4.2.
Valyuta kursini o'rnatish 467
V QISM. DALOLLAR 469
16-bo'lim. Windowsning asosiy funktsiyalari 471
16.1.
CreateFile va CloseHandle funksiyalari: obyektni ochish va yopish.471
16.10.
QueryDosDevice funktsiyasi: qurilma nomini olib tashlash
yogo uchun DOS-im'yam 487
16.10.1.
Ya'ni 488 yoshga to'ladi
16.10.2.
Butt wikliku 488
16.11: Dos Device funksiyasini aniqlang: qurilmaning DOS nomi bilan operatsiyalar 489
16.11.1.
Ya'ni 490 yoshga to'ladi
16.11.2.
Butt wikliku 490
17-bo'lim. HID API funktsiyalari.
492
17.1.
HidD_Hello funktsiyasi: kutubxonani tekshirish 492
17.2.
HidD_GetHidGuid funktsiyasi: GUID 492 ni olib tashlang
17.3.
HidD_GetPreparsedData funktsiyasi: qurilmaning tavsifi 493
17.4.
HidD_FreePreparsedData funktsiyasi: qurilmaning qo'shimcha tavsifi 493
17.5.
HidD_GetFeature funktsiyasi: FEATURE hisoboti 494-ni olish
17.6.
HidD_SetFeature funktsiyasi: 494-FEATURE hisobotiga o'tish
17.7.
HidD_GetNumInputBuffers funktsiyasi: buferlar sonini o'chirish 495
17.8.
HidD_SetNumInputBuffers funktsiyasi: buferlar sonini 495 ga o'rnatish
17.9.
HidD_GetAttribntes funktsiyasi: 495-qurilmadan atributlarni olib tashlash
17.10.
HidD_GetMamifactnrerStnng funktsiyasi.
otmanya qator vyrobnik 496
17.11.
497-mahsulot qatorini tanlash uchun HidD_GetProductString funktsiyasi
17.12.
HidD_ funksiyasi MumberString seriyasini oling.
qatorni kesish
seriya raqami 497
17.13.
HidD_GetIndexedString funktsiyasi.
498 indeksdan keyingi qatorni kesib oling
17.14.
HidDjGetlnputReporr funktsiyasi.
otmanya INPUT-hisobot 498
17.15.
HidD_SetOutputReport funktsiyasi.
OUTPUT hisobotini topshirish 499
17.16.
HidP_GetCaps funktsiyasi: vakolatlarni qidirish 499
17.17.
HidP_MaxDataListLength funktsiyasi: hisobotlar hajmini 500 tani saqlash
18-bob. UCH 502 Xost boshqaruvchisi
19.4.1.
Winobj 528
19.5.
Zasobi USB Forum 531
19.5.1.
HID deskriptor vositasi 531
19.6.
Zasobi HDD dasturiy ta'minot 533
19.7.
Zasobi Sourceforge 533
QO'SHIMLAR 535
Qo'shimcha 1. Qo'shimcha funktsiyalar 537

Qo'shimcha 2. Til identifikatorlari jadvali (LangID) 539
Qo'shimcha 3. Sotuvchi kodlari jadvali (Vendor ID, Device ID) 543
Qo'shimcha 4. CD 546 tavsifi
Adabiyot 548
Mavzu ko'rsatkichi 549
Kirish
Bu kitob kim uchun?
Kitobda nimani topasiz?
Dasturiy ta'minot afzalliklari
Uskuna afzalliklari
Dastur kodi haqida
Bo'limlarning qisqacha tavsifi
Uchrashuv
Podyaki
Gateway havolasi
I qism. USB haqidagi maxfiy yangiliklar
1-bo'lim. USB spetsifikatsiyasi
1.1.
USB nima va sizga nima kerak?
1.1.1.
Noodatiy USB arxitekturasi
1.1.2.
USB ning jismoniy va mantiqiy arxitekturasi
1.1.3.
USB omborlari
1.1.4.
USB qurilmalarining kuchi
1.1.5.
Transfer tamoyillari
1.1.6.
Uzilish mexanizmi
1.1.7.
Ma'lumotlarni uzatish rejimlari
1.1.8.
Mantiqiy ma'lumotlar almashinuvi
1.1.8.1.
RUBURN OF CLIENT PZ
1.1.8.2.
USB tizimi haydovchi versiyasi
1.1.8.3.
Xost boshqaruvchisining interfeysga mosligi
1.1.8.4.
USB periferik qurilma avtobus darajasi
1.1.8.5.
Mantiqiy USB qurilmasi
1.1.8.6.
USB qurilmasining funktsional darajasi
1.1.9.
Ma'lumotlarni darajalar bo'ylab uzatish
1.1.10.
Ma'lumotlarni uzatish turlari
1.1.11.
Qadri
1.1.12.
Yakuniy nuqtalar
1.1.13.
Kanallar
1.1.14.
Paketlar
1.1.14.1.
IN, OUT, SETUP va PING marker paketlarining formati
1.1.14.2.
SOF paket formati
1.2.3.3.
Konfiguratsiya deskriptori
1.2.3.4.
Interfeys deskriptori
1.2.3.5.
Yakuniy nuqta deskriptori
1.2.3.6.
Qator deskriptori
1.2.3.7.
Maxsus tavsiflovchilar
1.2.3.8.
Deskriptorni olib tashlash tartibi
1.3.
Plug and Play (PnP) tizimi
1.3.1.
USB qurilmalari konfiguratsiyasi
1.3.2.
USB qurilmalarini raqamlash
1.3.3.
USB qurilmalarining PnP identifikatorlari
1.3.4.
Qurilmalarning ramziy nomlari
1.4.
WDM modeli
2-bo'lim. Mikrokontroller uchun C ni dasturlash
2.1.
Mikrokontrollerlar uchun C tili haqida maxfiy ma'lumotlar
2.2.
Standart kutubxonalar Vikoristan
2.3.
AT89S5131 uchun dasturlash
2.3.1.
Initializatsiya fayli
2.3.2.
Deskriptor tuzilmalari
2.3.3.
Loyiha tuzilishi
3-bo'lim. Asboblar
3.1.
Dasturchilar
3.1.1.
Dasturchi Flip
3.1.2.
Dasturchi ER-Tronik
3.2.
Haydovchi yaratish vositalari
3.2.1.
NuMega Driver Studio
3.2.2.
Jungo WinDriver
3.2.3.
Jungo KernelDriver
3.3.
Zasobi Microsoft Visual Studio
3.3.1.
Qaramlik Walker
3.3.2.
Xato qidirish
3.3.3.
GuidGen
3.4.
Microsoft DDK dizayni
3.4.1.
Device Tree
3.4.2.
DevCon
3.4.2.1.
Asosiy sinflar
3.4.2.2.
haydovchi fayllar kaliti
3.4.2.3.
hwids kaliti
3.4.2.4.
qayta skanerlash kaliti
3.4.2.5.
Kalit to'plami
3.4.2.6.
Asosiy holat
3.4.3.
Chklnf va Genlnf
3.5.
Koshti CompuWare korporatsiyasi
3.5.1.
5.3.2.3.
Abstrakt ilova deskriptori
5.3.2.4.
Guruh tavsifi
5.3.3.
Maxsus so'rovlar
5.3.3.1.
SET_LINE_CODINGni o‘rnating
5.3.3.2.
GET_LINE_CODING kiriting
5.3.3.3.
SET_CONTROL_LINE_STATEni o‘rnating
5.3.3.4.
SEND_BREAK yozing
5.3.4.
Bildirishnomalar
5.3.4.1.
Bildirishnoma RING^DETECT
5.3.4.2.
Bildirishnoma: SERIAL_STATE
5.4.
Windows uchun CDC-ni qo'llab-quvvatlash
5.4.1.
Seriya portlar bilan ishlash uchun Windows xususiyatlariga qarash
5.4.1.1.
Port bilan asosiy operatsiyalar
5.4.1.2.
Port konfiguratsiya imkoniyatlari
5.4.1.3.
Portga maxsus sozlash
5.4.1.4.
Men chiziqli modemni olib tashlayman
5.4.1.5.
Platformada CDC dan ishlang.
NET
5.4.2.
Windows funksiyalarining turi va USB quvvat manbai
6-bo'lim. HID klassi
6.1.
HID qurilma spetsifikatsiyasi
6.2.
HID qurilmasi bilan ma'lumotlarni almashish tartibi
6.3.
HID qurilmasi uchun drayverni o'rnatish
6.4.
HID qurilma identifikatsiyasi
6.4.1.
Nopok qurilmalarni aniqlash
6.4.2.
HID qurilma konfiguratsiyasi deskriptori
6.4.3.
HID deskriptori
6.4.4.
Hisobot deskriptori
6.5.
Hisobot deskriptorining tuzilishi
6.5.1.
Elementi hisoboti
6.5.1.1.
Qisqa turdagi elementlar
6.5.1.2.
Uzoq turdagi elementlar
6.5.2.
Hisobot elementlarining turlari
6.5.2.1.
Asosiy elementlar
6.5.2.2.
Global elementlar
6.5.2.3.
Mahalliy elementlar
6.5.3.
Deskriptorlarni qo'llang
6.6.
HID qurilmasini so'rang
6.6.1.
GET_REPORT kiriting
6.6.2.
SET_REPORT yozing
6.6.3.
9.4.
Delphi yordamida CDC qurilmasi bilan ma'lumotlar almashinuvini dasturlash
9.5.
CDC qurilmasi bilan almashinuvni C# da dasturlash
9.5.1.
MSCOMM komponenti wiki
9.5.2.
Vikoristannya funktsiyalari Win32
9.6.
CDC muammolari
10-bo'lim. HID sinfini amalga oshirish
10.1.
AT89S5131 da HIDni amalga oshirish
10.2.
Ko'p baytlarni uzatish
10.3.
Xususiyat hisobotlari
10.4.
Xostdan maʼlumotlarni uzatish (SET_REPORT)
10.5.
HID qurilmasini o'rnatish
10.6.
HID qurilmasi bilan aloqa
10.6.1.
HID qurilmasining nomini o'zgartirish
10.6.2.
Men atributlarni olib tashlayman va hisobotlarni o'qiyman
10.6.3.
Xostdan HID qurilmasiga ma'lumotlarni uzatish
10.7.
HID qurilmalarining ilovalari
10.7.1.
"Misha" o'rnatishni amalga oshirish
10.7.2.
"Klaviatura" qurilmasini amalga oshirish
10.8.
HID protokoli uchun Vikipediya
10.8.1.
Ma'lumotlarni talqin qilish
10.8.2.
To'plamlar
10.8.3.
Massivi tugmalari
10.9.
Bir nechta hisobotlarga ega HID qurilmalari
11-bo'lim. Windowsning maxsus xususiyatlari
11.1.
API parametrlarini sozlash
11.1.1.
USB qurilmalarini uzatish
11.1.2.
Men uni USB qurilmasiga aylantiraman
11.2.
Qo'shimcha WMI yordamida USB qurilmalarini uzatish
11.3.
Windows XP ning o'ziga xos xususiyatlari
11.3.1.
HidD_GetInputReport - HID hisobotlarini o'qish
11.3.2.
Xom kiritish ma'lumotlarini olish
11.4.
DirectX xususiyatlari
11.5.
Yangi xususiyat qo'shish haqida suhbat
11.6.
Simvolli qurilma nomlari bilan ishlash
11.7.
12.3.3.4.
Krok 4. Terminal nuqtalari to'plami bo'yicha ko'rsatma
12.3.3.5.
Dars 5. Sinf va faylga nom berish
12.3.3.6.
Croc 6. Drayv funksiyalarini tanlang
12.3.3.7.
Krok 7. So'rovlarni qayta ishlash usulini tanlang
12.3.3.8.
8-bob. Saqlangan drayver parametrlarini yarating.
12.3.3.9.
Krok 9. Haydovchi kuchi
12.3.3.10.
Krok 10. IOCTL kodlarini sozlash
12.3.3.11.
Krok 11. Qo'shimcha tuzatishlar
12.3.4.
Haydovchi shablonni to'ldirish
12.3.5.
Sinfga asosiy usullar qo'shiladi
12.3.6.
Ma'lumotlarni o'qishni amalga oshirish
12.3.7.
Haydovchi o'rnatish
12.3.8.
Hurmat o'qish dasturi
12.3.9.
Boshqa turdagi terminal nuqtalaridan ma'lumotlarni o'qish
12.3.10.
USB qurilmasi uchun "toza" drayveri
IV qism.
Dovidnik
13-bo'lim. INF fayl formati
13.1.
INF fayl tuzilishi
13.1.1.
Bo'lim versiyasi
13.1.2.
Bo'lim ishlab chiqaruvchisi
13.1.3.
Bo'lim DestinationDirs
13.1.3.1.
Kalit DefaultDescDir
13.1.3.2.
Kalitlar fayl-ro'yxati-bo'limi
13.1.3.3.
Dirid kalit
13.1.3.4.
Asosiy pastki katalog
13.1.4.
Model tavsifi bo'limi
13.1.5.
Xxx bo'limi.
AddRegw xxx.
DelReg
13.1.6.
Xxx bo'limi.
LogConfig
13.1.7.
Xxx bo'limi.
Fayllarni nusxalash
13.1.8.
Bo'lim satrlari
13.1.9.
Bo'limlar havolalari
14.11.1.
Aylanadigan narsaning ma'nosi
14.11.2.
Wikliku dumba
14.12.
Dos Device funksiyasini aniqlang: DOS qurilma nomlari bilan operatsiyalar
14.12.1.
Aylanadigan narsaning ma'nosi
14.12.2.
Wikliku dumba
15-bo'lim. Windows tuzilmalari va oxirgi portlar uchun funksiyalari
15.1.
COMMCONFIG portini o'rnatish uchun tuzilma
15.2.
COMMPROP portining quvvat tuzilishi
15.3.
Vaqt tugashi tuzilishi COMMTIMEOUTS
15.4.
COMSTAT port holatining tuzilishi
15.5.
DCB tuzilishi
15.6.
BuildCommDCB funktsiyasi: zaryadlovchi DCB strukturasini qurish
15.6.1.
Qo'shimcha ma'lumot
15.6.2.
Aylanadigan narsaning ma'nosi
15.6.3.
Wikliku dumba
15.7.
BuildCommDCBAndTimeouts funksiyasi: DCB strukturasini qurish va zaryadlash vaqti tugashi
15.8.
SetCommBreak va ClearCommBreak funktsiyalari: ma'lumotlarni qayta ishlash
15.8.1.
Aylanadigan narsaning ma'nosi
15.9.
ClearCommError funktsiyasi: portga xabarlarni bekor qilish va o'chirish
15.9.1.
Aylanadigan narsaning ma'nosi
15.10.
EscapeCommFunction: port ulanishi
15.10.1.
Aylanadigan narsaning ma'nosi
15.11.
GetCommMask va SetCommMask funktsiyalari: niqobni bosing
15.11.1.
Aylanadigan narsaning ma'nosi
15.12.
WaitCommEvent funktsiyasi MAQOMOTI porti ostida joylashgan
15.12.1.
Aylanadigan narsaning ma'nosi
15.12.2.
Qo'shimcha ma'lumot
15.12.3.
Wikliku dumba
15.13.
GetCommConfig va SetCommConfig funksiyalari: port parametrlarini sozlash
15.23.1.
Qo'shimcha ma'lumot
15.23.2.
Aylanadigan narsaning ma'nosi
15.23.3.
Wikliku dumba
16-bo'lim. Windows Setup API ning tuzilmalari va funktsiyalari
16.1.
DiGetCiassDevs funktsiyasini o'rnatish: qurilmalarni uzatish
16.1.1.
Aylanadigan narsaning ma'nosi
16.2.
SetupDiDestroyDevicelnfoList funksiyasi qurilma tavsifi blokiga tayinlangan
16.2.1.
Aylanadigan narsaning ma'nosi
16.3.
SetupDiEnumDeviceLnterfaces funktsiyasi: qurilma haqida ma'lumot
16.3.1.
Aylanadigan narsaning ma'nosi
16.4.
Funktsiya SetupDiGetDeviceLnterfaceDetaii: qurilma haqida batafsil ma'lumot
16.5.
SetupDiEnumDevicelnfo funktsiyasi: qurilma haqida ma'lumot
16.6.
Funktsiya SetupDiGetDeviceRegistryProperty: Plug and Play vakolatlarini tanlash
16.7.
CM_Get_DevNode_Status funktsiyasi: qurilma holati
16.8.
CM_Request_Device_Eject funksiyasi qurilmani xavfsiz ishga tushiradi
17-bo'lim. Windows HID API ning tuzilmalari va funktsiyalari
17.1.
HidD_Hello funktsiyasi: kutubxonani tekshirish
17.2.
HidD_JetHidGuid funktsiyasi: GUIDni olish
17.3.
HidD_GetPreparsedData funktsiyasi: qurilma tavsifi
17.4.
HidD_EreePreparsedData funktsiyasi: qurilmaning batafsil tavsifi
17.5.
Funktsiya HidD_Get Feature: Xususiyatlar hisobotini chizish
17.6.
HidD_SetFeature funksiyasi: Xususiyatlar hisobotini yuborish
17.7.
Qo'shimcha 5. Qurilma menejeri yorlig'i qanday yaratiladi
Qo'shimcha 6. Ovqatning qismlari
Qo'shimcha 7. CD tavsifi
Adabiyot
Mavzu ko'rsatkichi

Keling, buni minimal bilan qilaylik:
18f2455 o'z ichiga oladi - vikorystovy MK uchun kutubxona
--
enable_digital_io() -- barcha kirishlarni raqamli rejimga o'tkazish
--
taxallus Tugma hisoblanadi pin_B7 - agar bizda allaqachon tugma ulangan bo'lsa, biz ovoz beramiz
pin_B7_direction = kiritish - bizning tugma tizimga kirish uchun ishlaydi
--
-- bir qator - va bizda USB CDC bilan ishlash uchun kerak bo'lgan hamma narsa bor
usb_serialni o'z ichiga oladi - usb bilan ishlash uchun kutubxona
--
usb_serial_init() -- --USB CDC-ni ishga tushiradi
abadiy tsikl- Asosiy tsikl, asta-sekin tugaydi
usb_serial_flush() - USB yangilanishi.
Ushbu protsedura barcha kerakli narsalarni o'z ichiga oladi
-- shaxsiy kompyuterga ulanishni qo'llab-quvvatlash

yakuniy halqa

Ushbu kodni kompilyatsiya qilish, HEX faylini qo'shimcha yuklash vositasi yordamida MK ga yozish va qurilmani ishga tushirish orqali siz tizimga yangi qurilma qanday tayinlanganligini ko'rishingiz mumkin: Virtual com port.

Endi, qurilma ishlayotganida, u suyuqlana boshlaydi. Qabul qilingan baytni o'qish uchun asosiy funktsiyadan foydalaning usb_serial_read( ) bayt : mantiqiy. Agar bayt o'chirilgan bo'lsa, ko'rsatilgan qiymatni kiriting va uni aylantiring rost.

, aks holda u aylanadi yolg'on Baytni haddan tashqari yuklash uchun quyidagi protseduradan foydalaning:

usb_serial_data

.
--
enable_digital_io()
--
taxallus Tugma hisoblanadi pin_B7
U o'zgaruvchi sifatida yashiringan, shuning uchun baytni yuborish uchun unga yuborilayotgan baytning qiymatini belgilash kifoya.
--
--
Asosiy sikl oldidan bayt o'lchami, asosiy tsiklda baytlar o'chirilganligi va ular qaytarib yuborilganligi tekshiriladi.
--
usb_serial_init()
18f2455 ni o'z ichiga oladi pin_B7_direction = kiritish usb_serialni o'z ichiga oladi
abadiy tsiklvar bayt
usb_serial_flush()
ch-- Men o'zgarishga qoyil qoldim - Asosiy tsiklagar
(usb_serial_read(ch)) keyin
-- agar bayt o'chirilsa, ch dan hech qanday yozuv bo'lmaydi
usb_serial_data = ch

-- baytlarni orqaga o'tkazish mumkin
agar tugaydi

yakuniy halqa
Biz kompilyatsiya qilamiz, tugmani bosamiz, hayotni o'zgartiramiz, bootloaderni ishga tushiramiz, proshivkani o'zgartiramiz, ishga tushiramiz.


Qurilma tizimda yana paydo bo'ldi, endi qurilmaga norozilik bildirish uchun dastur kerak.

Bizniki bo'lmasa-da, biz tayyor terminaldan foydalanmoqdamiz: men RealTerm dasturidan foydalanmoqdaman.

Biz portni kerakli raqam bilan ochamiz va ma'lumotlarni qo'shamiz.

Va bizni boshqarganlarni topishimiz kerak.
Xo'sh, hamma narsa kerak bo'lganidek ishlaydi.
Dasturiy ta'minot
Xo'sh, bizning mikrokontroller baytlarni qabul qilishi va darhol ularni qaytarib yuborishi mumkin.
SpinEdit2 - baytni o'ninchi ko'rinishda kiritish
Button3 - bayt yuborish uchun
Memo1 - qabul qilingan ma'lumotlarni ko'rsatish uchun.

Yuqorida aytib o'tilganidek, siz com port bilan oddiy matnli fayl bilan ishlashingiz kerak: wiki CreateFile, WriteFile va ReadFile funksiyalarini bajaradi.

Tafsilotlarga kirmasdan, keling, com port bilan ishlash uchun tayyor kutubxonani olaylik: ComPort.

Kerakli ma'lumotlar teri tugmachasiga bosiladi va yakuniy kodni olib tashlash mumkin:

birlik 1;

interfeys

Foydalanadi
Windows, Xabarlar, SysUtils, Variantlar, Sinflar, Grafika, Boshqaruv elementlari, Shakllar,
Dialoglar, StdCtrls, Spin, ComPort;

Turi
TForm1 = sinf (TForm)
SpinEdit1: TSpinEdit;
1-tugma: TB tugmasi;
2-tugma: TB tugmasi;
SpinEdit2: TSpinEdit;
3-tugma: TB tugmasi;
Memo1: TMemo;
protsedura OnRead(Sender: TObject; ReadBytes: Bayt massivi);
protsedura Button1Click(Sender: TObject);
protsedura Button2Click(Sender: TObject);
protsedura FormDestroy(Yuborish: TObject);
protsedura Button3Click(Sender: TObject);
xususiy
(Shaxsiy deklaratsiyalar)
Port: TComPort;
ommaviy
(Ommaviy deklaratsiyalar)
oxiri;

var
Shakl 1: TForm1;
son:integer;
amalga oshirish

Protsedura TForm1.Button1Click(Sender: TObject);
boshlanishi
Port:= TComPort.Create(SpinEdit1.Value, br115200); // ulanish yaratish
Port.OnRead:= OnRead; //Qabul qilingan ma'lumotlarni o'qish oqimini yarating
Button2.Enabled:= true; //yopish tugmasini faollashtiring
oxiri;

Protsedura TForm1.Button2Click(Sender: TObject);
boshlanishi
Port.Free; // ulanishni yopadi
Button2.Enabled:= false ; //tugmani yoqing
oxiri;

Protsedura TForm1.Button3Click(Sender: TObject);
boshlanishi
agar Button2.Enabled keyin Port.Write();
oxiri;

Protsedura TForm1.FormDestroy(Sender: TObject);
boshlanishi
agar Button2.Enabled keyin
Port.Free;
oxiri;

Protsedura TForm1.OnRead(Sender: TObject; ReadBytes: Bayt massivi);
var
i:integer;
boshlanishi
i uchun:= Past(ReadBytes) dan Yuqori (ReadBytes) uchun //qabul qilingan baytlar massivi orqali o'tgan
boshlanishi
Memo1.Text:= Memo1.Text + "." +InttoHex(ReadBytes[i],2);
//bu HEX qiymatini oynaga qo'shing inc(son);
//Qabul qilingan baytlar soni muhim
oxiri;
agar raqam > 10 bo'lsa, boshlang Memo1.Lines.Add("");
//ko'chiriladigan qator
//Qabul qilingan baytlar soni muhim
oxiri;

son: = 0;

Ishga tushirilgan, o'rnatilgan ulanish, yuborilgan baytlar:

Eksa tayyor, eng oddiy USB qurilmasi bilan ishlash uchun eng oddiy terminalimiz.

Ko'rinishidan, o'qish va yozish dinamik bayt massivlari yordamida amalga oshiriladi.

.
--
enable_digital_io()
--
taxallus Tugma hisoblanadi pin_B7
U o'zgaruvchi sifatida yashiringan, shuning uchun baytni yuborish uchun unga yuborilayotgan baytning qiymatini belgilash kifoya.
--
--
Asosiy sikl oldidan bayt o'lchami, asosiy tsiklda baytlar o'chirilganligi va ular qaytarib yuborilganligi tekshiriladi.
--
usb_serial_init()
18f2455 ni o'z ichiga oladi pin_B7_direction = kiritish
18f2455 ni o'z ichiga oladi Olingan ma'lumotni qayta ishlash orqali siz oqim tartibiga biriktirilgan kerakli almashinuv protokolini qo'shishingiz mumkin. i
abadiy tsiklvar bayt
usb_serial_flush()
ch-- Men o'zgarishga qoyil qoldim - Asosiy tsikl- Do'stimga baqiraman
-- agar bayt o'chirilgan bo'lsa, bu kerakli harakatlarni bildiradi hol ch of
- bayt soni bo'yicha takrorlash
0: usb_serial_data = 0xff 1: usb_serial_data = tugma
BOSHQA blok- olib tashlangan narsa boshqacha
uchun 16 foydalanish Olingan ma'lumotni qayta ishlash orqali siz oqim tartibiga biriktirilgan kerakli almashinuv protokolini qo'shishingiz mumkin. halqa- 10 bayt ma'lumotlar yuboriladi
usb_serial_data = ch +i - ch dan ch +15 gacha
-- shaxsiy kompyuterga ulanishni qo'llab-quvvatlash
oxirgi blok
yakuniy holat
-- agar bayt o'chirilsa, ch dan hech qanday yozuv bo'lmaydi
-- shaxsiy kompyuterga ulanishni qo'llab-quvvatlash

Qo'shimcha imkoniyatlar

Agar siz unga qarasangiz, dunyoning kengligida juda ko'p bo'lgan dumba kutubxonasining batafsil tavsifi bilan oddiy maqolani ko'rasiz.

Men sizga bir oz ko'proq buzilgan ma'lumot beraman.

O'lponlarning kuchliligi ustidan kechirim Bir vaqtning o'zida bir bayt ma'lumot yuborish endi qo'lda emas. Ko'pincha kutubxonadan foydalanishingiz mumkin
chop etish
...
. Ma'lumotlarni qayta ishlash uchun turli formatlardan foydalanish kerak: bayt, hex, dec, bin, boolean, bu dasturda ma'lumotlarni ko'rsatishni soddalashtirishi mumkin.
>chop etishni o'z ichiga oladi

var dword

ma'lumotlar

print_dword_hex(usb_serial_ma'lumotlar, ma'lumotlar)
Barcha buyruqlar nomlarini kutubxona faylida topish mumkin. Kompyuterga kengaytirilgan ulanish Agar mikrokontrollerning asosiy siklini boshlashdan oldin birinchi navbatda shaxsiy kompyuter bilan aloqa o'rnatish kerak bo'lsa, siz uning oldiga qatorlarni qo'shishingiz mumkin.
usb_serial_data = ch

esa

(usb_cdc_line_status() == 0x00)
halqa
Biriktirilgan port raqamiga tayinlangan
Hamma narsani olib tashlash uchun tizim har bir yangi ulanish uchun birinchi mavjud port raqamini ko'radi. Va bu kelajakda unga ergashishi kerakligini anglatadi.
{
24 , Hech narsa so'ralmasligini ta'minlash uchun USB kutubxonasini ulashdan oldin qurilmaga noyob seriya raqamini belgilash kerak:
Raqam har qanday bo'lishi mumkin va turli belgilarni o'z ichiga oladi.
"0" const bayt
"1" const bayt
"2" const bayt
"3" const bayt
"4" const bayt
"5" const bayt
"6" const bayt
"7" const bayt
"8" const bayt
"9" const bayt
USB_STRING3 =- Dovjina massivi
}

0x03, -- bDescriptorType

, 0x00,
Hamma narsani olib tashlash uchun tizim har bir yangi ulanish uchun birinchi mavjud port raqamini ko'radi."X"
{
28 , --
, 0x00
Men nomini o'zgartirishim va uni o'zim o'rnatishim mumkin const bayt
Drayvlarni o'rnatishdan oldin tizimda ko'rinadigan qurilma nomini o'zgartirishingiz mumkin, seriya raqami kabi nomlar qatorini tanlashingiz mumkin, ammo bu USB kutubxonasini ulashdan oldin bajarilishi kerak. const bayt
USB_STRING2 = const bayt
0x03, -- bDescriptorType const bayt
" " const bayt
"D" const bayt
0x03, -- bDescriptorType const bayt
"e" const bayt
"m" const bayt
"o" const bayt
" " const bayt
"=" const bayt
")" - Dovjina massivi
}

"B"


"a"

"r"

"d"

Afsuski, qurilma drayverlarini o'rnatganingizdan so'ng, .inf faylida ko'rsatilgan nomlarni o'zgartiring, keyin u erda nomlarni o'zgartirishingiz mumkin.
DESCRIPTION="Demo CDC"

Biz qurilmaga avtomatik ulanishni tashkil qilamiz
Afsuski, Vikonati tse Zavodiga to'g'ridan-to'g'ri yo'llar yo'q, shuning uchun u ayyor bo'lishi kerak.

Biz birinchi navbatda qurilmamizga noyob drayver va mahsulot berishimiz kerak, shunda u boshqa yuzlab standart CDC proshivkalarini osongina taniy oladi. VIDlar va PIDlar juda qimmatga tushadi, shuning uchun keling, xitoycha yo'l bilan boraylik: ma'nolari juda aniq.
Biz birinchi navbatda qurilmamizga noyob drayver va mahsulot berishimiz kerak, shunda u boshqa yuzlab standart CDC proshivkalarini osongina taniy oladi. Mikrodastur:

FF10 o'rniga ikkita so'z (2 bayt) kiritishingiz mumkin.

Yakuniy natija mavjud bo'lgan arxivda joylashgan bo'ladi.
Haydovchilar:


Bizning VID va PID kombinatsiyamiz uchun drayver fragmentlari tan olinmaydi, keling, qadriyatlarimizni .inf fayliga qo'lda qo'shamiz:


%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10

%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10
Dasturiy ta'minot:

Qurilmani quvvatga ulash/ulash uchun biz ComponentUSB kutubxonasini ulashimiz kerak.

Men teri qatorini tushuntirish zaruratini hurmat qilmayman: barcha o'zgarishlar qo'shilgan loyihada amalga oshirilishi mumkin.

Natija

Skrinshotda tahrirlash tugmasi faqat ulangan qurilma mavjud bo'lganda faol ekanligini ko'rish qiyin, bunda dastur tugmani bo'shatish tugmasiga 50 ms ichida quvvat yuboradi (ammo bu noto'g'ri, chunki tugmani bosish aks etishi mumkin) MKda).

Quyosh sayyoradagi hayotning mohiyatidir.