USB портының жұмысын бағдарламалау интерфейсі. PIC контроллерлерінде USB интерфейсін практикалық қолдану. Компьютерге қосылуды күтуде

Кіріспе
Бұл кітап кімге арналған?
Кітаптан не табасыз
Бағдарламалық қамтамасыз ету талаптары
Аппараттық құралдарға қойылатын талаптар
Бағдарлама коды туралы
Тараулардың қысқаша сипаттамасы
Белгілер
Алғыс
Кері байланыс
I бөлім: USB туралы түсінік
1-тарау. USB сипаттамасы
1.1. USB дегеніміз не және ол не үшін қажет?
1.1.1. Жалпы USB архитектурасы
1.1.2. USB физикалық және логикалық архитектурасы
1.1.3. USB құрамдас бөліктері
1.1.4. USB құрылғысының сипаттары
1.1.5. Мәліметтерді тасымалдау принциптері
1.1.6. Үзіліс механизмі
1.1.7. Мәліметтерді тасымалдау режимдері
1.1.8. Мәліметтер алмасудың логикалық деңгейлері
1.1.8.1. Клиенттік бағдарламалық қамтамасыз ету деңгейі
1.1.8.2. USB жүйелік драйвер деңгейі
1.1.8.3. Хост интерфейсінің контроллері деңгейі
1.1.8.4. USB перифериялық автобус деңгейі
1.1.8.5. USB логикалық құрылғы деңгейі
1.1.8.6. Функционалдық деңгей USB құрылғылары
1.1.9. Деректерді қабаттар арқылы тасымалдау
1.1.10. Мәліметтерді тасымалдау түрлері
1.1.11. Персонал
1.1.12. Соңғы нүктелер
1.1.13. Арналар
1.1.14. Пакеттер
1.1.14.1. IN, OUT, SETUP және PING таңбалауыш пакеттерінің пішімі
1.1.14.2. SOF пакет пішімі
1.1.14.3. Деректер пакетінің пішімі
1.1.14.4. Растау пакетінің пішімі
1.1.14.5. SPLIT бума пішімі
1.1.15. Бақылау сомасы
1.1.15.1. CRC есептеу алгоритмі
1.1.15.2. CRC бағдарламалық қамтамасыз етуді есептеу
1.1.16. Мәмілелер
1.1.16.1. Транзакция түрлері
1.1.16.2. Транзакцияны растау және ағынды бақылау
1.1.16.3. Транзакция протоколдары
1.2. USB құрылғыларына сұраулар
1.2.1. Конфигурация пакеті
1.2.2. USB құрылғыларына арналған стандартты сұраулар
1.2.2.1. GET_STATUS күйі алынуда
1.2.2.2. CLEAR_FEATURE сипатын қалпына келтіру
1.2.2.3. SET_FEATURE сипатын шешу
1.2.2.4. SET_ADDRESS шинасында мекенжайды орнату
1.2.2.5. GET_DESCRIPTOR тұтқасын алу
1.2.2.6. SET_DESCRIPTOR дескрипторынан өту
1.2.2.7. GET_CONFIGURATION конфигурация кодын алу
1.2.2.8. SET_CONFIGURATION конфигурация кодын орнату
1.2.2.9. GET_INTERFACE интерфейс конфигурация кодын алу
1.2.2.10. SET_INTERFACE интерфейс конфигурация кодын орнату
1.2.2.11. SYNC_FRAME синхрондау кадр нөмірін орнату
1.2.2.12. Стандартты сұраныстарды өңдеу
1.2.3. Құрылғы дескрипторы
1.2.3.1. Құрылғы дескрипторы
1.2.3.2. Квалификациялық құрылғы дескрипторы
1.2.3.3. Конфигурация дескрипторы
1.2.3.4. Интерфейс дескрипторы
1.2.3.5. Соңғы нүкте дескрипторы
1.2.3.6. Жолдық тұтқа
1.2.3.7. Арнайы дескрипторлар
1.2.3.8. Дескрипторларды алу реті
1.3. Plug and Play (PnP) жүйесі
1.3.1. USB құрылғыларын конфигурациялау
1.3.2. USB құрылғысын нөмірлеу
1.3.3. PnP USB құрылғы идентификаторлары
1.3.4. Символдық құрылғы атаулары
1.4. WDM үлгісі
2-тарау: Микроконтроллерге арналған C бағдарламалау
2.1. Микроконтроллерлерге арналған Си тілі туралы жалпы мәліметтер
2.2. Стандартты кітапханаларды пайдалану
2.3. AT89S5131 үшін бағдарламалау
2.3.1. Инициализация файлы
2.3.2. Дескриптор құрылымдары
2.3.3. Жоба құрылымы
3-тарау. Құралдар
3.1. Бағдарламашылар
3.1.1. Бағдарламашы Flip
3.1.2. Бағдарламашы ER-Tronik
3.2. Драйверді жасау құралдары
3.2.1. NuMega Driver Studio
3.2.2. Jungo WinDriver
3.2.3. Jungo KernelDriver
3.3. Microsoft Visual Studio құралдары
3.3.1. Тәуелділік Уокер
3.3.2. Қате іздеу
3.3.3. GuidGen
3.4. Microsoft DDK құралдары
3.4.1. DeviceTree
3.4.2. DevCon
3.4.2.1. Негізгі сыныптар
3.4.2.2. драйвер файлдарының кілті
3.4.2.3. hwids кілті
3.4.2.4. қайта сканерлеу пернесі
3.4.2.5. Кілттер жинағы
3.4.2.6. Негізгі күй
3.4.3. Chklnf және Genlnf
3.5. CompuWare корпорациясының құралдары
3.5.1. Монитор
3.5.2. SymLink
3.5.3. EzDriverlnstaller
3.5.4. WdmSniff
3.6. Syslnternals құралдары
3.6.1. WinObj
3.7. USB форум құралдары
3.7.1. HID дескриптор құралы
3.8. USB пәрменді тексеруші
3.9. HDD бағдарламалық құралдары
3.10. Sourceforge құралдары
3.11. Bus Hound мониторинг бағдарламасы
4-тарау. .NET жүйесінде Win32 функцияларын пайдалану принциптері
4.1. Жалпы ақпарат
4.2. Win32 функцияларын импорттау
4.3. Құрылымдар
4.3.1. StructLayout атрибуты
4.3.2. MarshalAs атрибуты
4.4. Деректерге тікелей қол жеткізу
4.5. Windows хабарламаларын өңдеу
4.6. WMI туралы жалпы ақпарат
4.7. Осы тарауға арналған онлайн ресурстар
II бөлім. USB сыныптары
5 тарау. CDC класы
5.1. USB/RS-232 интерфейстерін түрлендіру әдістері
5.2. RS-232 интерфейсі туралы жалпы ақпарат
5.2.1. Жолдарды алмастыру
5.2.1.1. Берілген деректер (BA/TxD/TD)
5.2.1.2. Алынған деректер (BB/RxD/RD)
5.2.1.3. Аударуды сұрау (CA/RTS)
5.2.1.4. Тасымалдауға дайын (CB/CTS)
5.2.1.5. DCE дайындығы (CC/DSR)
5.2.1.6. DTE дайындығы (CD/DTR)
5.2.1.7. Қоңырау көрсеткіші (CE/RI)
5.2.1.8. Тасымалдаушыны анықтау (CF/DCD)
5.2.1.9. Қабылдауға дайын (CJ)
5.3. CDC спецификациясы
5.3.1. Стандартты дескрипторлар
5.3.2. Функционалды дескрипторлар
5.3.2.1. Тақырып функциясының дескрипторы
5.3.2.2. Командалық режим дескрипторы
5.3.2.3. Абстрактілі құрылғы тұтқасы
5.3.2.4. Топтастыру дескрипторы
5.3.3. Арнайы сұраныстар
5.3.3.1. SET_LINE_CODING сұрауы
5.3.3.2. GET_LINE_CODING сұрауы
5.3.3.3. SET_CONTROL_LINE_STATE сұрауы
5.3.3.4. SEND_BREAK сұрау
5.3.4. Хабарландырулар
5.3.4.1. RING^DETECT хабарландыруы
5.3.4.2. SERIAL_STATE хабарландыруы
5.4. Windows жүйесінде CDC қолдауы
5.4.1. Windows сериялық порт мүмкіндіктеріне шолу
5.4.1.1. Негізгі порт операциялары
5.4.1.2. Портты орнату мүмкіндіктері
5.4.1.3. Арнайы порт параметрі
5.4.1.4. Модем желілерінің күйін алу
5.4.1.5. Платформада CDC-пен жұмыс істеу. NET
5.4.2. Windows функциялары мен USB сұраулары арасындағы сәйкестік
6-тарау. HID сыныбы
6.1. HID құрылғысының сипаттамасы
6.2. HID құрылғысымен қалай байланысуға болады
6.3. HID құрылғы драйверін орнату
6.4. HID құрылғы идентификациясы
6.4.1. Сәйкестендіру жүктеу құрылғылары
6.4.2. HID құрылғысының конфигурация дескрипторы
6.4.3. HID дескрипторы
6.4.4. Есеп дескрипторы
6.5. Есептің дескриптор құрылымы
6.5.1. Есеп элементтері
6.5.1.1. Қысқа типті элементтер
6.5.1.2. Ұзын типті элементтер
6.5.2. Есеп элементтерінің түрлері
6.5.2.1. Негізгі элементтер
6.5.2.2. Ғаламдық элементтер
6.5.2.3. Жергілікті элементтер
6.5.3. Дескрипторлардың мысалдары
6.6. HID құрылғысына сұраулар
6.6.1. GET_REPORT сұрауы
6.6.2. SET_REPORT сұрауы
6.6.3. GET_IDLE сұрауы
6.6.4. SET_IDLE сұрауы
6.6.5. GET_PROTOCOL сұрауы
6.6.6. SET_PROTOCOL сұрауы
6.7. Құралдар
6.8. Windows жүйесіндегі HID құрылғыларына арналған драйверлер
7-тарау. Басқа USB сыныптары
III бөлім. USB бағдарламалау тәжірибесі
8-тарау. AT89S5131 негізінде USB құрылғысын жасау
8.1. AT89S5131 туралы жалпы ақпарат
8.2. AT89S5131 блок-схемасы
8.3. USB регистрлері AT89C5131
8.3.1. USBCON тіркелімі
8.3.2. USBADDR тіркелімі
8.3.3. USBINT тіркелімі
8.3.4. USBIEN тіркелімі
8.3.5. UEPNUM тізілімі
8.3.6. UEPCONX тіркелімі
8.3.7. UEPSTAX тіркелімі
8.3.8. UEPRST тіркелімі
8.3.9. UEPINT тізілімі
8.3.10. UEPIEN тіркелімі
8.3.11. UEPDATX тіркелімі
8.3.12. UBYCTLX тіркелімі
8.3.13. UFNUML тіркелімі
8.3.14. UFNUMH тіркелімі
8.4. AT89S5131 схемасы
8.5. AT89S5131 үшін негізгі жоба
8.5.1. AT89S5131 үшін бағдарламаның бірінші нұсқасы
8.5.2. Жолдық дескрипторларды қосу
8.5.3. Соңғы нүктелерді қосу
8.6. Бағдарлама жүктеп алынуда
9-тарау CDC класын енгізу
9.1. CDC енгізу
9.2. Құрылғы дескрипторлары
9.2.1. Соңғы нүктелерді инициализациялау
9.2.2. CDC сұрауларын өңдеу
9.2.3. RS порты мен CDC желісін конфигурациялау
9.2.4. Мәліметтерді қабылдау және беру
9.3. Драйверді орнату
9.4. Delphi-де CDC құрылғысымен мәліметтер алмасуды бағдарламалау
9.5. C# тілінде CDC құрылғысымен бағдарламалау алмасу
9.5.1. MSCOMM компонентін пайдалану
9.5.2. Win32 мүмкіндіктерін пайдалану
9.6. CDC мәселелері
10-тарау. HID сыныбын енгізу
10.1. AT89S5131 жүйесінде HID енгізу
10.2. Бірнеше байтты тасымалдау
10.3. Мүмкіндік есептер
10.4. Хосттан деректерді тасымалдау (SET_REPORT)
10.5. HID құрылғысын орнату
10.6. HID құрылғысымен байланыс
10.6.1. HID құрылғы атауын алу
10.6.2. Құрылғы атрибуттарын алу және есептерді оқу
10.6.3. Деректерді хосттан HID құрылғысына тасымалдау
10.7. HID құрылғыларының мысалдары
10.7.1. Тінтуір құрылғысын жүзеге асыру
10.7.2. «Пернетақта» құрылғысын жүзеге асыру
10.8. HID протоколын пайдалану
10.8.1. Мәліметтерді интерпретациялау
10.8.2. Жинақтар
10.8.3. Массивтер және түймелер
10.9. Бірнеше есептері бар HID құрылғысы
11-тарау. Арнайы Windows мүмкіндіктері
11.1. API функцияларын орнату
11.1.1. USB құрылғыларын санау
11.1.2. USB құрылғысының күйін алу
11.2. WMI арқылы USB құрылғыларын санау
11.3. Windows XP жүйесінің ерекше мүмкіндіктері
11.3.1. HidD_GetInputReport - HID есептерін оқу
11.3.2. Шикізат кіріс деректерін қабылдау
11.4. DirectX мүмкіндіктері
11.5. Жаңа жабдықты қосу диалогы
11.6. Символдық құрылғы атауларымен жұмыс
11.7. Флэш-дискілерді қауіпсіз жою
11.8. Құрылғыны қосу мен алып тастауды анықтау
11.9. Интернет ресурстары
12-тарау. Драйверлерді дамыту
12.1. WDM драйверінің негізгі процедуралары
12.1.1. DriverEntry процедурасы
12.1.2. AddDevice процедурасы
12.1.3. Жүкті босату процедурасы
12.1.4. Драйвердің жұмыс істеу процедуралары
12.1.4.1. Пакет тақырыбы
12.1.4.2. Енгізу/шығару стек ұяшықтары
12.4.1.3. Драйвердің жұмыс істеу процедуралары
12.1.5. IOCTL сұрауларына қызмет көрсету
12.2. Драйверді жүктеу және драйвер процедураларына қол жеткізу
12.2.1. Жүргізушімен жұмыс істеу тәртібі
12.2.2. Жүргізушіні тіркеу
12.2.2.1. SCM менеджері арқылы тіркеу
12.2.2.2. Тіркеудегі драйвер параметрлері
12.2.3. Операциялық процедураларға сілтеме
12.2.4. Драйверді орындалатын файлдың ішінде сақтау
12.3. Driver Studio көмегімен драйвер жасау
12.3.1. Driver Studio кітапханасы туралы бірнеше сөз
12.3.1.1. KDriver сыныбы
12.3.1.2. KDevice класы
12.3.1.3. Klrp сыныбы
12.3.1.4. KRegistryKey сыныбы
12.3.1.5. KLowerDevice класы
12.3.1.6. USB сыныптары
12.3.2. Басқа Driver Studio сыныптары
12.3.3. Driver Studio көмегімен драйвер үлгісін жасау
12.3.3.1. 1-қадам: жобаның атын және жолын орнатыңыз
12.3.3.2. 2-қадам. Драйвер архитектурасын таңдаңыз
12.3.3.3. 3-қадам. Шиналарды таңдау
12.3.3.4. 4-қадам: Соңғы нүктелер жинағын анықтаңыз
12.3.3.5. 5-қадам: сыныпты және файл атауын көрсетіңіз
12.3.3.6. 6-қадам: Драйвер мүмкіндіктерін таңдаңыз
12.3.3.7. Қадам 7. Сұранысты өңдеу әдісін таңдау
12.3.3.8. 8-қадам: Тұрақты драйвер параметрлерін жасаңыз
12.3.3.9. 9-қадам: Драйвер сипаттары
12.3.3.10. 10-қадам: IOCTL кодтарын орнату
12.3.3.11. 11-қадам: Қосымша параметрлер
12.3.4. Драйвер үлгісін аяқтау
12.3.5. Құрылғы класының негізгі әдістері
12.3.6. Мәліметтерді оқуды жүзеге асыру
12.3.7. Драйверді орнату
12.3.8. Деректерді оқу құралы
12.3.9. Соңғы нүктелердің басқа түрлерінен деректерді оқу
12.3.10. USB құрылғысының драйверін «тазалау».
IV бөлім. Каталог
13-тарау. INF файл пішімі
13.1. INF файл құрылымы
13.1.1. Нұсқа бөлімі
13.1.2. Өндіруші бөлімі
13.1.3. Тағайындалған орынның директорлары бөлімі
13.1.3.1. Негізгі DefaultDescDir
13.1.3.2. Файлдар тізімі бөлімі пернелері
13.1.3.3. Dirid кілті
13.1.3.4. Негізгі ішкі каталог
13.1.4. Модельді сипаттау бөлімі
13.1.5. xxx бөлімі. AddRegw xxx. DelReg
13.1.6. xxx бөлімі. LogConfig
13.1.7. xxx бөлімі. Файлдарды көшіру
13.1.8. Жолдар бөлімі
13.1.9. Бөлім қосылымдары
13.2. INF файлдарын жасау және сынау
13.3. INF файлын пайдаланып құрылғыларды орнату
13.4. USB үшін тізілім филиалдары
14-тарау: Windows жүйесінің негізгі мүмкіндіктері
14.1. CreateFile және CloseHandle функциялары: нысанды ашу және жабу
14.1.1. Қосымша ақпарат
14.1.2. Қайтарылатын мән
14.1.3. Мысал шақыру
14.2. ReadFile функциясы: деректерді оқу
14.2.1. Қосымша ақпарат
14.2.2. Қайтарылатын мән
14.2.3. Мысал шақыру
14.3. Write File функциясы: деректерді беру
14.3.1. Қосымша ақпарат
14.3.2. Қайтарылатын мән
14.3.3. Мысал шақыру
14.4. ReadFileEx функциясы. APC деректерін оқу
14.4.1. Қайтарылатын мән
14.4.2. Қосымша ақпарат
14.4.3. Мысал шақыру
14.5. WriteFiieEx функциясы: APC деректерін тасымалдау
14.5.1. Қайтарылатын мән
14.5.2. Мысал шақыру
14.6. WaitForSingieObject функциясы нысанның сигнал күйін күтеді
14.6.1. Қайтарылатын мән
14.7. WaitForMultipleObjects функциясы: нысандардың сигнал күйін күту
14.7.1. Қайтарылатын мән
14.8. GetOverlapped Result функциясы: асинхронды әрекеттің нәтижесі
14.8.1. Қайтарылатын мән
14.9. DeviceloControl функциясы: драйверді тікелей басқару
14.9.1. Қайтарылатын мән
14.10. Болдырмау/o функциясы: операцияны тоқтатады
14.10.1. Қайтарылатын мән
14.11. Dos Device функциясын сұрау, құрылғы атауын DOS атауы бойынша алу
14.11.1. Қайтарылатын мән
14.11.2. Мысал шақыру
14.12. Dos Device функциясын анықтаңыз: DOS құрылғысының атымен операциялар
14.12.1. Қайтарылатын мән
14.12.2. Мысал шақыру
15-тарау. Сериялық порттарға арналған Windows құрылымдары мен функциялары
15.1. COMMCONFIG порт параметрлерінің құрылымы
15.2. COMMPROP порт сипаттары құрылымы
15.3. COMMTIMEOUTS күту уақыты құрылымы
15.4. COMSTAT портының күй құрылымы
15.5. DCB құрылымы
15.6. BuildCommDCB функциясы: Жолдан DCB құрылымын жасаңыз
15.6.1. Қосымша ақпарат
15.6.2. Қайтарылатын мән
15.6.3. Мысал шақыру
15.7. BuildCommDCBAndTimeouts функциясы: DCB құрылымын және жолдан күту уақытын жасаңыз
15.8. SetCommBreak және ClearCommBreak функциялары: деректерді шығаруды басқару
15.8.1. Қайтарылатын мән
15.9. ClearCommError функциясы: порт қателерін алу және жою
15.9.1. Қайтарылатын мән
15.10. EscapeCommFunction: Портты басқару
15.10.1. Қайтарылатын мән
15.11. GetCommMask және SetCommMask функциялары: оқиғаны шақыру маскасы
15.11.1. Қайтарылатын мән
15.12. WaitCommEvent функциясы COM портының оқиғасын күтеді
15.12.1. Қайтарылатын мән
15.12.2. Қосымша ақпарат
15.12.3. Мысал шақыру
15.13. GetCommConfig және SetCommConfig функциялары: Порт параметрлерін конфигурациялау
15.13.1. Қайтарылатын мән
15.13.2. Мысал шақыру
15.14. CommConfigDialog функциясы: порт конфигурациясының диалогтық терезесі
15.14.1. Қайтарылатын мән
15.14.2. Қосымша ақпарат
15.14.3. Мысал шақыру
15.15. GetCommProperties функциясы: порт сипаттарын оқу
15.15.1. Қайтарылатын мән
15.15.2. Мысал шақыру
15.16. GetCommState және SetCommState функциялары: Порт күйі
15.16.1. Қайтарылатын мән
15.16.2. Мысал шақыру
15.17. GetCommTimeouts және SetComniTimeouts функциялары: Порттың күту уақыты
15.17.1. Қайтарылатын мән
15.17.2. Мысал шақыру
15.18. PurgeComm функциясы: порт буферлерін жуу
15.18.1. Қайтарылатын мән
15.18.2. Мысал шақыру
15.19. SetupComm функциясы: буфер өлшемдерін конфигурациялау
15.19.1. Қайтарылатын мән
15.20. GetDefaultCommConfig және SetDefaitltCommConfig функциялары: әдепкі порт параметрлері
15.20.1. Қайтарылатын мән
15.21. TransmitCommChar функциясы. тарату ерекше кейіпкерлер
15.21.1. Қайтарылатын мән
15.22. GetCommModemStatus функциясы: модем күйі
15.22.1. Қайтарылатын мән
15.22.2. Мысал шақыру
15.23. EnumPorts функциясы: порттарды санау
15.23.1. Қосымша ақпарат
15.23.2. Қайтарылатын мән
15.23.3. Мысал шақыру
16-тарау. Windows орнату API құрылымдары мен функциялары
16.1. DiGetCiassDevs функциясын орнату: Құрылғыларды санау
16.1.1. Қайтарылатын мән
16.2. SetupDiDestroyDevicelnfoList функциясы құрылғы сипаттамасы блогын босатады
16.2.1. Қайтарылатын мән
16.3. SetupDiEnumDevicelnterfaces функциясы: құрылғы туралы ақпарат
16.3.1. Қайтарылатын мән
16.4. SetupDiGetDevicelnterfaceDetaii функциясы: құрылғы туралы толық ақпарат
16.5. SetupDiEnumDevicelnfo функциясы: құрылғы туралы ақпарат
16.6. SetupDiGetDeviceRegistryProperty функциясы: Plug and Play құрылғысының сипаттарын алу
16.7. CM_Get_DevNode_Status функциясы: құрылғы күйі
16.8. Құрылғыны қауіпсіз жою үшін CM_Request_Device_Eject функциясы
17-тарау. Windows HID API құрылымдары мен функциялары
17.1. HidD_Hello функциясы: кітапхананы тексеру
17.2. HidD_JetHidGuid функциясы: GUID алу
17.3. HidD_GetPreparsedData функциясы: құрылғы дескрипторын жасау
17.4. HidD_EreePreparsedData функциясы: құрылғының тұтқасын босату
17.5. HidD_Get мүмкіндігі функциясы: мүмкіндік есебін алу
17.6. HidD_SetFeature функциясы: мүмкіндік есебін жіберу
17.7. HidD_GetNumlnputBuffers функциясы: буферлердің санын алу
17.8. HidD_SetNumlnputBuffers функциясы: буфер санын орнату
17.9. HidD_GetAttributes функциясы: құрылғы атрибуттарын алу
17.10. HidD_GetManufacturerString функциясы. өндіруші жолын алу
17.11. HidD_GetProductString функциясы өнім жолын алады
17.12. HidD_GetSerialNumberString функциясы. сериялық нөмір жолын алу
17.13. HidD_GetIndexedString функциясы. индекс бойынша жолды алу
17.14. Функция HidD_Jetlnput Енгізу есебін қабылдайтын есеп
17.15. HidD_SetOutputReport функциясы. шығыс есебін жіберу
17.16. HidP_GetCaps функциясы: құрылғы сипаттарын алу
17.17. HidP_MaxDataListLength функциясы: есеп өлшемдерін алу
17.18. HidD_FIushQueue функциясы: буферлерді тазалау
17.19. HidP_GetLinkColiectionNodes функциясы: жинақ ағашы
17.20. HidP_GetScaledUsageValue және HidP_SetScaledUsage мәні функциялары: түрлендірілген мәндерді алу және орнату
17.21. HidF_MaxUsageListLength функциясы: кілт кодтары үшін буфер өлшемі
17.22. HidP_UsageListDifference функциясы: массивтер арасындағы айырмашылық
Қолданбалар
Қосымша 1. Қосымша функциялар
Қосымша 2. Delphi-нің басқа нұсқаларында мысалдарды құрастыру
Қосымша 3. Тіл идентификаторларының кестесі (LangID)
Қосымша 4. Өндіруші кодтарының кестесі (Жеткізуші идентификаторы, Құрылғы идентификаторы)
Қосымша 5. Құрылғы менеджерінің жарлығын қалай жасауға болады
Қосымша 6. Жиі қойылатын сұрақтар
Қосымша 7. CD сипаттамасы
Әдебиет
Пәндік көрсеткіш

USB шинасы (Әмбебап сериялық автобус - әмбебап сериялық автобус) 1996 жылы 15 қаңтарда Intel, DEC, IBM, NEC, Northen Telecom және Compaq фирмаларының стандарттың бірінші нұсқасын бекітуімен пайда болды.

Оны әзірлеушілерге арналған стандарт жиынтығының негізгі мақсаты - пайдаланушыларға перифериялық құрылғылармен Plug&Play режимінде жұмыс істеу мүмкіндігін жасау. Бұл құрылғыны жұмыс істеп тұрған компьютерге қосу, оны қосқаннан кейін бірден автоматты түрде тану және сәйкес драйверлерді орнату мүмкіндігі болуы керек дегенді білдіреді. Сонымен қатар, аз қуатты құрылғыларды автобустың өзінен қуатпен қамтамасыз еткен жөн. Шина жылдамдығы перифериялық құрылғылардың басым көпшілігі үшін жеткілікті болуы керек. USB контроллері шинаға қосылған құрылғылардың санына қарамастан тек бір үзуді алуы керек, яғни IBM PC үйлесімді компьютерінің ішкі шиналарындағы ресурстардың жетіспеушілігі мәселесін шешуі керек.

Барлық дерлік тапсырмалар USB стандартында шешілді, ал 1997 жылдың көктемінде USB құрылғыларын қосуға арналған қосқыштармен жабдықталған компьютерлер пайда бола бастады. Енді USB-ны компьютердің перифериялық құрылғыларын өндірушілер белсенді түрде енгізді, мысалы, Apple Computers фирмасының iMAC компьютерінде сыртқы автобус ретінде тек USB бар.

USB 1.0 мүмкіндіктері келесідей:

1. деректерді берудің жоғары жылдамдығы (толық жылдамдықты) – 12 МБ ол/Бірге;

2. жоғары жылдамдықпен алмасу үшін кабельдің максималды ұзындығы 5 метр;

3. деректер алмасудың төмен жылдамдығы (төмен жылдамдықта) – 1,5 МБ ол/Бірге;

4. төмен деректерді беру жылдамдығы үшін кабельдің максималды ұзындығы 3 метр;

5. қосылған құрылғылардың максималды саны – 127;

6. әртүрлі валюта бағамы бар құрылғыларды бір уақытта қосу мүмкіндігі;

8. Бір құрылғының максималды ток тұтынуы 500 мА құрайды.

Сондықтан сандық бейнекамералар мен жоғары жылдамдықты қатты дискілерден басқа кез келген дерлік перифериялық құрылғыларды USB 1.0 желісіне қосқан жөн. Бұл интерфейс сандық камералар сияқты жиі қосылатын/ажыратылған құрылғыларды қосу үшін әсіресе ыңғайлы.
Тек екі деректер жылдамдығын пайдалану мүмкіндігі шинаның пайдалану мүмкіндігін шектейді, бірақ интерфейстік желілердің санын айтарлықтай азайтады және аппараттық қамтамасыз етуді жүзеге асыруды жеңілдетеді.
Тікелей USB арқылы қуат тек пернетақталар, тышқандар, джойстиктер және т.б. сияқты қуаты аз құрылғылар үшін мүмкін болады.

USB сигналдары төмендегі суретте схемалық түрде көрсетілген 4 сымды кабель арқылы беріледі:

2.6.1-сурет – USB сигнал сымдары

Мұнда GND перифериялық құрылғыларды қуаттандыруға арналған жалпы сым тізбегі, Vbus қуат тізбектері үшін де +5 В. D+ шинасы шинаға деректерді жіберуге арналған, ал D-шинасы деректерді қабылдауға арналған.
Толық жылдамдықты автобус кабелі экранмен қорғалған бұралған жұп кабель болып табылады және оны төмен жылдамдықта жұмыс істеу үшін де пайдалануға болады. Ең төменгі жылдамдықта жұмыс істеуге арналған кабель (мысалы, тінтуірді қосу үшін) кез келген және экрандалмаған болуы мүмкін.
Перифериялық құрылғыларды қосу үшін пайдаланылатын қосқыштар серияларға бөлінеді: «A» сериялы қосқыштар (штепсельдік розетка) тек компьютер сияқты көзге қосылуға арналған, «B» сериялы қосқыштар (штепсельдік розетка) тек қосылуға арналған. перифериялық құрылғыға.

USB қосқыштарында 2.6.1-кестеде көрсетілген келесі түйреуіш нөмірлері бар.

2.6.1-кесте – USB контактілерінің мақсаты мен таңбалануы

1999 жылы USB автобус стандартының бірінші нұсқасын әзірлеуге бастамашы болған компьютерлік компаниялардың сол консорциумы қосымша жоғары жылдамдықты (Hi-speed) режимін енгізумен ерекшеленетін USB 2.0 нұсқасын белсенді түрде әзірлеуге кірісті. Автобустың өткізу қабілеті 40 есе, яғни 480 Мбит/с дейін ұлғайтылды, бұл USB арқылы бейне деректерді тасымалдауға мүмкіндік берді.
Бұрын шығарылған барлық перифериялық құрылғылар мен жоғары жылдамдықты кабельдердің үйлесімділігі толығымен сақталған. 2.0 стандартты контроллері бағдарламаланатын құрылғылардың жүйелік логикалық жинағына біріктірілген (мысалы, аналық платадербес компьютер).

2008 жылы Intel, Microsoft, Hewlett-Packard, Texas Instruments, NEC және NXP Semiconductors USB 3.0 стандартты сипаттамасын жасады. USB 3.0 спецификациясында жаңартылған стандарттың қосқыштары мен кабельдері USB 2.0-мен физикалық және функционалдық үйлесімді, бірақ төрт байланыс желісіне қосымша тағы төртеуі қосылды. Дегенмен, жаңа байланыстар USB қосқыштары 3.0 басқа контакт қатарында ескілерден бөлек орналасқан. USB 3.0 спецификациясы ақпаратты тасымалдаудың максималды жылдамдығын 5 Гбит/с дейін арттырады - бұл USB 2.0 қамтамасыз ете алатын 480 Мбит/с-тан жоғарырақ. Сонымен қатар, максималды ток бір құрылғыға 500 мА-дан 900 мА-ға дейін ұлғайтылды, бұл бұрын бөлек қуат көзін қажет ететін кейбір құрылғыларды қуаттандыруға мүмкіндік береді.

Компьютер арқылы жұмыс істеуге қажет USB құрылғысын жасадыңыз делік. Бұған кем дегенде екі жолмен қол жеткізуге болады:

1. толық функционалды операциялық жүйе драйверін жасау;

2. арнайы класты USB интерфейсін пайдалану - HID (Адам интерфейсі құрылғысы) құрылғылары деп аталатын құрылғылар.

Бірінші әдіс әмбебап: драйверлерді жазу саласында жеткілікті білімге ие бола отырып, оны USB қолдайтын кез келген жылдамдықта кез келген құрылғымен жұмыс істеуге бағдарламалауға болады. Бірақ бұл өте қиын міндет.

Екінші жол келесідей. Компьютер-адам интерфейсі құрылғылары немесе HID құрылғылары үшін заманауи операциялық жүйелер қолдайтын интерфейс бар, мысалы:

1. пернетақталар, тышқандар, джойстиктер;

2. әртүрлі сенсорлар мен оқырмандар;

3. ойынды басқару және педальдар;

4. түймелер, ажыратқыштар, реттегіштер.

Кез келген мұндай құрылғы, егер ол HID құрылғыларына қойылатын талаптарға сай болса, жүйе автоматты түрде таниды және арнайы драйверлерді жазуды қажет етпейді. Сонымен қатар, оларды бағдарламалау әдетте пайдаланушы құрылғы драйверін жазудан әлдеқайда оңай. Өкінішке орай, бұл әдістің айтарлықтай кемшілігі бар: HID құрылғысымен ақпарат алмасу жылдамдығы өте шектеулі және максимум 64 кБ/с құрайды.

Негізінде, HID технологиясына негізделген кез келген құрылғымен өзара әрекеттесуді ұйымдастыруға болады, тіпті егер ол қатаң мағынада адам мен компьютер арасындағы интерфейстік құрылғы болмаса да. Бұл бірегей құрылғы драйверінің уақытты қажет ететін әзірлеуін болдырмайды және жаңа USB құрылғысын әзірлеуге уақытты үнемдейді. Хост жағында құрылғымен байланыс операциялық жүйемен қамтылған стандартты HID драйвері арқылы басқарылады. Сізге тек құрылғы жағындағы USB-HID протоколының ең аз талаптарын орындау қажет.

Айта кету керек, бір қарағанда адамдардың өзара әрекеттесу құрылғыларының анықтамасына жатпайтын көптеген USB құрылғыларын HID құрылғылары ретінде енгізу әлі де қисынды. Бұл құбылыс жақында USB технологиясын жаппай қолдануды бастан өткерген өндірістік жабдық саласында жиі кездеседі. Мысалы, USB интерфейсін пайдаланып компьютерден шығатын сигналдарының параметрлерін орнату мүмкіндігі бар зертханалық қуат көзін қарастырайық. Қуат көзінің өзі адаммен өзара әрекеттесу құралы емес екені сөзсіз. Дегенмен, бұл жағдайда USB қосылымы арқылы жүзеге асырылатын функциялар құрылғының өзінде орнатылған пернетақтаны, басқару элементтерін және индикаторларды қайталайды. Және бұл басқару элементтері HID анықтамасына жатады. Тиісінше, HID құрылғысы ретінде осы USB функциялары бар қуат көзін ұйымдастыру өте қисынды.

Қарастырылған мысалда деректерді берудің төмен жылдамдығы қалыпты жұмыс үшін жеткілікті болады, басқа жағдайларда құрылғылар айырбас бағамына өте талапшыл болуы мүмкін; Төмен жылдамдықберу - бұл USB 1.0 шинасының 12 Мбит/с толық жылдамдығымен салыстырғанда, нақты USB енгізуін таңдау мәселесінде HID технологиясының үлкен кемшілігі сияқты көрінетін HID құрылғысын жобалау опциясының негізгі шектеуі. Дегенмен, көптеген байланыс тапсырмалары үшін көрсетілген жылдамдық жеткілікті және HID архитектурасы мамандандырылған құрал ретінде деректер алмасуды ұйымдастыру әдістерінің арасында лайықты орын алады.

HID құрылғыларының екі түрі бар: қатысатын (жүктелетін) және компьютердің бастапқы жүктелуіне қатыспайтындары. Жүктелетін USB-HID құрылғысының ең жарқын мысалы - компьютер іске қосылған кезде жұмыс істей бастайтын пернетақта.

HID құрылғысын жобалау кезінде келесі техникалық талаптар орындалуы керек:

1. Толық жылдамдықты HID құрылғысы секунд сайын 64000 байт немесе 1 мс сайын 64 байт тасымалдай алады; Төмен жылдамдықты HID құрылғысы секундына 800 байтқа дейін немесе 10 мс сайын 8 байт тасымалдай алады.

2. HID құрылғысы жіберу үшін жаңа деректердің бар-жоғын анықтау үшін сұрау жиілігін жоспарлай алады.

3. HID құрылғысымен мәліметтер алмасу есеп деп аталатын арнайы құрылым арқылы жүзеге асырылады. Әрбір анықталған есепте 65535 байтқа дейін деректер болуы мүмкін. Есеп құрылымы кез келген деректерді беру пішімін сипаттауға мүмкіндік беретін өте икемді ұйымға ие. Нақты есеп пішімі хостқа белгілі болуы үшін микроконтроллерде арнайы сипаттама – есеп дескрипторы болуы керек.

USB өзара әрекеттесуі тікелей микроконтроллерде бірнеше жолмен жүзеге асырылады:

1. аппараттық қолдауы бар контроллерді пайдалану, мысалы, atmega AT90USB*;

2. кез келген микроконтроллерде USB интерфейсінің бағдарламалық эмуляциясын пайдалану.

Бағдарламалық қамтамасыз етуді енгізу үшін қазіргі уақытта микроконтроллерлердің әртүрлі отбасыларына арналған бірқатар дайын шешімдер бар. AVR микроконтроллерлері үшін, мысалы, Atmega8, Си тілінде келесі тегін кітапханаларды пайдалануға болады:

Екеуі де қолдануда өте оңай, байланыс қателерін өңдеуді қоспағанда, USB 1.1 төмен жылдамдықты құрылғылардың толық эмуляциясын қамтамасыз етеді. электрлік сипаттамаларжәне кем дегенде 2 килобайт флэш жады, 128 байт жедел жады және 12-ден 20 МГц жиілігі бар барлық дерлік AVR контроллерлерінде жұмыс істейді.

Қолдайтын қолданбаларды жазу үшін Windows USB HID құрылғылары WDK (Windows драйвер жинағы) құрамына кіретін жасырын* тақырып файлдарын қажет етеді немесе сіз еркін қолжетімді жасырын кітапхананы немесе басқа ұқсас кітапхананы пайдалана аласыз.

Осылайша, жалпы алғанда, USB бағдарламалау - бұл аппараттық қолдауы бар арнайы микроконтроллерді және операциялық жүйе драйверін жазуды қажет ететін өте күрделі тапсырма. Дегенмен, іс жүзінде құрылғыларды жасау кезінде сіз әлдеқайда қарапайым HID құрылғы интерфейсін пайдалана аласыз, оны қолдау стандартты жүйелік драйвер деңгейінде жүзеге асырылады, ал бағдарламалау бар функциялық кітапханаларды пайдалану арқылы жеңілдетілген.

Қауіпсіздік сұрақтары

  1. USB-дегі D- және GND сымдарының айырмашылығы неде? Неліктен қуат пен сигнал үшін бір жалпы сымды пайдалана алмайсыз?
  2. Бүгінгі таңда қанша USB жылдамдығы режимі бар (соның ішінде 3.0 нұсқасы)?
  3. HID құрылғысы дегеніміз не? Неліктен олар заманауи операциялық жүйелерде жұмыс істеу үшін драйверлерді жазуды талап етпейді?
  4. Кірістірілген интерфейс қолдауы жоқ микропроцессорды пайдаланып USB құрылғыларын іске асыру мүмкін бе?
  5. USB 3.0 мен алдыңғы нұсқалардың негізгі айырмашылықтары қандай?

1-сурет

USB интерфейсі перифериялық құрылғыларды дербес компьютерлерге қосуға арналған интерфейс ретінде танымал бола түсуде заманауи компьютерлержиі әдеттегі RS-232 интерфейсі болмайды. USB-нің танымалдығы көптеген себептерге байланысты, олардың негізгілері:

  • жоғары алмасу жылдамдығы, жоғары шу иммунитеті
  • деректер ағынын бақылау, тұтастықты бақылау және қателерді түзету
  • концентраторлар мен қосылыстар арқылы тармақталу мүмкіндігі үлкен мөлшерлерқұрылғылар.
  • Автобустан қуат алу мүмкіндігі
  • автобустың әмбебаптығы - әртүрлі құрылғыларды қосу мүмкіндігі (пернетақта, принтер, модем)
  • автоматты жүйені анықтау және конфигурациялау, Plug and Play

Дегенмен, микроконтроллер құрылғыларын жасаушылардың USB-ны кеңінен пайдалануына кедергі келтіретін (көбінесе негізсіз) факторлар бар:

  • Windows үшін драйверлерді бағдарламалау қажеттілігі
  • кірістірілген USB интерфейсі бар микроконтроллерлердің салыстырмалы түрде төмен таралуы
  • 2-сабақ: USB 2.0 үйлесімді HID джойстик құрылғысын жасау.

Бұл мақалалар сериясы бұл қиындықтарды жеңу өте оңай екенін және кез келген адам өз құрылғысын әдеттегі RS-232-ден USB-ге «жаңарта» алатынын немесе USB интерфейсі бар жаңа құрылғыны жасай алатынын көрсетуге арналған.

Мысалдарда қолданылатын микроконтроллер Microchip шығарған микроконтроллер болады USB 2.0 интерфейсі бар PIC18F4550 (төмен жылдамдықты және толық жылдамдықты қолдайды).

Сабақ 1. Windows программалаусыз USB, виртуалды COM порты

USB құрылғыларын жасау кезінде туындайтын міндеттердің бірі RS-232 интерфейсінен USB интерфейсіне көшу болып табылады, ал егер «ескі» құрылғы өзгертілсе немесе құрылғы бұрыннан бар протоколдармен және компьютерлік бағдарламалық құралмен үйлесімді болуы керек болса, онда оны жасаған жөн. компьютердегі кез келген бағдарламалық құралды өзгерту бағдарламалық құралынан құтылыңыз. Бұл мәселені шешудің бірі - USB интерфейсін виртуалды COM порты ретінде пайдалану. Бұл әдісті қолдану компьютерлік бағдарламалық құралды өзгерту қажеттілігін жояды, өйткені USB қосылымын дербес компьютер қосымша COM порты ретінде көреді. Тағы бір маңызды артықшылығы - стандартты Windows драйверлері пайдаланылады және кез келген пайдаланушы драйверін жасаудың қажеті жоқ.

USB спецификациясы телекоммуникациялар (модемдер, терминалдар, телефондар) және желілік құрылғылар (Ethernet адаптерлері мен концентраторлары, ADSL модемдері), соның ішінде сериялық порт эмуляциясы үшін әртүрлі қосылу режимдерін анықтайтын Коммуникациялық құрылғы класын (CDC) сипаттайды.

Мысал ретінде кернеу деректерін потенциометрден және TC77 сандық сенсорынан температураны RS-232 арқылы жіберетін құрылғыны алайық, сонымен қатар екі жарық диодты қосу/өшіру пәрмендерін қабылдайды (қарапайымдылық үшін біз бұл мысалды PICDEM™ FS жүйесінде орындаймыз) USB ДЕМОНСТРАЦИЯЛЫҚ ТАҚТА, бірақ сіз қарапайым схеманы жинай аласыз - төменде қараңыз).

PICDEM FS-USB әзірлеу тақтасы USB2.0 шинасы бар PIC18F4550 микроконтроллеріндегі құрылғыларды әзірлеуге және көрсетуге арналған. Тақтада TQFP44 бумасындағы PIC18F4550 контроллері бар, оның келесі мүмкіндіктері бар:

  • Максималды жұмыс жиілігі - 48 МГц (12 MIPS);
  • 32 КБ Flash бағдарлама жады (Enhanced Flash технологиясы);
  • 2 КБ деректер жады (оның ішінде 1 КБ екі портты жедел жады);
  • 256 байт EEPROM деректер жады;
  • 12 Мбит/с жылдамдықты қолдайтын FS USB2.0 интерфейсі, кірістірілген трансивер және кернеу реттегіші бар.

Тақтада мыналар орнатылған:

  • кварц 20 МГц;
  • USART-тан USB-ге ауысу мүмкіндігін көрсету үшін RS-232 интерфейсі;
  • Тізбек ішіндегі бағдарламалауға және жөндеуге арналған қосқыш
  • USB шинасынан қуатқа ауысу мүмкіндігі бар қоректендіру кернеуінің тұрақтандырғышы;
  • PICtail™ кеңейту қосқышы;
  • Температура сенсоры TC77, I2C арқылы қосылған;
  • ADC кірісіне қосылған айнымалы резистор;
  • Жарықдиодтар, түймелер.

Бұл құрылғыда құрылғыны басқаруға және кернеу мен температура мәндерін көрсетуге арналған компьютер бағдарламасы бар. Сонымен, біз құрылғыны RS-232-ге қосып, жүйеде қол жетімді COM портын таңдап, құрылғымызбен алмасу бағамын, деректер биттерінің санын, тоқтату биттерінің санын, сондай-ақ паритет биттерінің параметрлерін орната аламыз. және микроконтроллер бағдарламасына сәйкес ағынды басқару (бұл үшін біз контроллердің инициализация параметрлерін білуіміз керек дегенді білдіреді)


Күріш. 2

Құрылғыны USB желісіне қосуды бастайық.

Microchip Technology Inc. Дайын қолданба үлгісін ұсынады PIC18F2550, PIC18F2455, PIC18F4455, PIC18F4550 микроконтроллерлері үшін USB CDC қолдауын жүзеге асыратын AN956. Бағдарлама оңай модернизациялауға және дайын жобаларға біріктіруге мүмкіндік беретін модульдік принцип бойынша құрылған.

Контроллерді бастапқы инициализациялаудан кейін бағдарлама бірнеше дайын функциялардың көмегімен USB интерфейсі арқылы компьютермен байланыса алады:

Біз USB арқылы деректерді беру және қабылдау үшін бағдарламамызды өзгертеміз.

Деректерді дайындау және беру бағдарламасының фрагменті:

Деректерді қабылдау:

if(getsUSBUSART(input_buffer,1)) ( ауыстырып-қосқыш (input_buffer) ( "1" жағдайы : mLED_3_On(); үзіліс; "2" регистрі: mLED_3_Off(); үзіліс; "3" жағдайы : mLED_4_On(); үзіліс; регистр " 4" : mLED_4_Off(); үзіліс; әдепкі: үзу; ) )

Құрылғыны USB желісіне қосқаннан кейін жүйе жаңа құрылғыны таниды


Күріш. 3

Және жаңа жабдықтарды орнатады


Күріш. 4

Көрсетілген жерден орнатуды таңдаймыз және AN956 бағдарламасының бастапқы код пакетінен mcpusb.inf файлының орнына апаратын жолды көрсетеміз. Осыдан кейін жүйеге жаңа құрылғы орнатылады.


Күріш. 5

Сонымен, жаңа құрылғы пайдалануға дайын. Жүйеде жаңа виртуалды COM порты пайда болды.


Күріш. 6

Енді біздің бағдарламамызда құрылғымен байланысатындай көрінетін виртуалды COM портын таңдай аламыз...


Күріш. 7

... және құрылғы шынымен USB қосылымы арқылы жүйеде пайда болған COM порты арқылы жұмыс істей бастағанын көріңіз.

Айта кету керек, USB деректерді басқаруды және түзетуді қамтамасыз етеді, сондықтан ағын жылдамдығы, паритет және ағынды басқару биттері сияқты ұғымдар абстрактілі ұғымдарға айналады, ал біздің жағдайда оларды кез келген адам таңдай алады, жалғыз ақпараттық параметр виртуалды COM нөмірі болып табылады. порт.

PICDEM CDC терезесі


Күріш. 8

Кірістірілген USB 2.0 модулі бар PIC18Fxx5x микроконтроллерлерін пайдаланған кезде виртуалды COM порты секундына 80 Кбайт (640 Кбит/с) дейінгі деректерді беру жылдамдығын қамтамасыз ете алады, бұл RS-232 арқылы мүмкін болатын тасымалдау жылдамдығынан айтарлықтай асып түседі. қараңыз, қажетті компьютерлік бағдарламалық құралды өзгертудің қажеті жоқ!

1-сабақта пайдаланылған бағдарламалар үлгісі, құжаттама және диаграмма.

  1. PICDEM CDC бағдарламасы + Delphi жүктеуге арналған бастапқы кодтар
  2. COM портымен жұмыс істеу үшін Delphi компонентін жүктеп алыңыз
  3. AN956+ бастапқы бастапқы кодтар
  4. Файл user_uart.c (AN956 түпнұсқалық бағдарламасына жасалған барлық өзгертулер тек осы файлда жасалған. 1-сабақтағы мысалды іске қосу үшін бұл файлды C:\MCHPFSUSB\fw\Cdc\user\ каталогына көшіру керек, user.c файлын жобада user_uart .c арқылы жасаңыз, жобаны құрастырыңыз және микроконтроллерді жыпылықтаңыз)
  5. USB құрылғысының жеңілдетілген диаграммасы


Күріш. 9

Ескертпе: PICDEM FS USB тақтасының түпнұсқа дизайны тақтаның қуат көзін (сыртқы көз немесе USB) автоматты түрде анықтауды пайдаланады. Сондықтан, жеңілдетілген схеманы пайдаланған кезде usbcfg.h файлындағы #define USE_USB_BUSSENSE_IO жолына түсініктеме беру керек.

2-сабақ: USB 2.0 үйлесімді HID джойстик құрылғысын жасау

Ең көп таралған USB құрылғылары - адам интерфейсі құрылғылары (HID). Бұл класстың типтік өкілдері USB пернетақталары, тышқандар, джойстиктер, монитор параметрлерінің панельдері, штрих-кодтарды оқу құрылғылары, карта оқу құралдары және т.б. HID құрылғыларының артықшылықтары:

  • іске асырудың қарапайымдылығы;
  • ықшам код;
  • Windows қолдауы (қосымша драйверлер қажет емес).

Microchip веб-сайтында HID тінтуірінің манипуляторын іске асырудың мысалы бар. Осы мысалға негізделген ең қарапайым ойын манипуляторының орындалуын қарастырайық. Бұл жоба үшін біз PICDEM FS-USB демонстрациялық тақтасын (DM163025) қолданамыз. PICDEM FS-USB әзірлеу тақтасында бір айнымалы резистор және 2 түйме бар, сондықтан әзірленетін джойстикте ең аз басқару элементтері болады (2 түйме және, мысалы, газ реттегіші).

Ең алдымен жасалып жатқан джойстик үшін құрылғы дескрипторын қайта жазуымыз керек. Тапсырманы жеңілдету үшін веб-сайттан жүктеп алуға болатын HID Descriptor Tool бағдарламасын пайдалануға болады www.usb.org

Бағдарлама кейбір HID құрылғыларының мысал конфигурацияларымен бірге келеді, оларды тапсырмаңызға сәйкес реттеуге немесе жеке HID құрылғыңызды жасауға болады.


Күріш. 10

Сонымен, біздің жағдайда деректердің бірнеше түрі қолданылатын болады - бұл басқаруды модельдеу - Simulation Controls, және дәлірек айтқанда, бұл дроссель тұтқасы (педаль) және басқару түймелері (Түйме). Операциялық жүйе осы деректер түрлерін өңдеуді «білу» үшін деректердің максималды және ең төменгі мәндерін және өлшемін сипаттау қажет. Біздің жағдайда «газ» бір 8 биттік мән (есеп_өлшемі = 8, есеп_саны = 1) болып табылады және түймелердің күйі бір разрядтық мәндердің өрісі ретінде анықталады. Мысал тек 2 түймені пайдаланады, бірақ өрісті байт мәніне туралау қажет (есеп_өлшемі = 1, есеп_саны = 8). Жалпы алғанда, компьютерден деректерді сұраған кезде микроконтроллер 2 байт беруі керек - газ деңгейі және жасалған құрылғы дескрипторына сәйкес түймелердің күйі (мүмкін дескрипторлардың толық сипаттамасын HID құрылғыларының сипаттамасын қараңыз). www.usb.org). Құрылған құрылғы дескрипторының сипаттамасын әртүрлі пішімдерде, соның ішінде тақырып файлы ретінде сақтауға болады.h

Сонымен қатар, HID класына тән дескриптор сипаттамасында алынған құрылғы дескрипторының өлшемін реттеу керек және соңғы нүкте дескрипторындағы соңғы нүкте арқылы берілетін деректердің өлшемін өзгерту керек (біздің жағдайда біз 2 байт жібереміз, сондықтан өлшем HID_INT_IN_EP_SIZE=2).

Тізімдегі өзгерістер Windows жүйесіне қосылған құрылғыны джойстик ретінде тануы үшін жеткілікті. Енді біз жол деректерін құрылғыда біз қалаған атқа ие болатындай реттей аламыз (мысалы, «PIC18F4550 джойстик»). Құрылғыға орыс тілінде атау беру үшін UNICODE кодтауында жол дескрипторын енгізу керек. Бұл джойстиктің сипаттамасын аяқтайды және деректерді ДК-ге тасымалдау үшін дайындау керек.

ReadPOT(); // іске қосу потенциометрінің кернеуін өлшеу буфері = ADRESH;

// өңдеу түймесі егер(sw2==0) буфер |= 0x01 күйін көрсетеді;


басқа буфер &= ~0x01;

if(sw3==0) буфер |= 0x02;


басқа буфер &= ~0x02;

Құрылғы конфигурациясын өзгерту кезінде - басқару элементтерін немесе түймелерді қосу, құрылғы дескрипторының сипаттамасын өзгерту ғана емес, сонымен қатар жасалған дескрипторға сәйкес деректерді қатаң түрде тасымалдау қажет. Сонымен, USAGE_MAXIMUM (BUTTON 2) құрылғы дескрипторының сипаттамасындағы түймелердің максималды санын 2-ден 8-ге дейін өзгерту арқылы біз 8 түймесі бар джойстик аламыз.


Күріш. 13

Дескриптор күрделене түскен сайын, біз джойстиктің толық орындалуын ала аламыз, бірақ біз келесі параметрлерді өзгертуді ұмытпауымыз керек: дескриптор өлшемі, соңғы нүкте өлшемі және дескрипторда жарияланған ақпараттың сонша мөлшерін жіберу қажет.


Күріш. 14

2-сабақта пайдаланылған мысал бағдарламалар, құжаттама және диаграмма.

  1. HID тінтуірін іске асыруға арналған бастапқы бастапқы кодтар.
  2. HID джойстикін іске асырудың бастапқы кодтары.

Сабақ 3. Құрама USB құрылғысы

Кез келген USB құрылғысының бірнеше конфигурациялары болуы мүмкін және әрбір конфигурацияда бірнеше интерфейстер болады. Бұл USB қасиеті жасалған құрылғыны компьютерге әртүрлі интерфейстері бар бірнеше USB құрылғылары ретінде тануға мүмкіндік береді. Мысалы, тінтуірдің кірістірілген карта оқу құрылғысы болуы мүмкін және компьютермен екі тәуелсіз құрылғы ретінде әрекеттесе алады.

Құрылғы дескрипторының құрылымы:


Күріш. 15

Тінтуірдің және жасалған джойстиктің стандартты мысалына сүйене отырып, біз компьютер екі тәуелсіз HID құрылғысы ретінде анықтайтын композиттік USB құрылғысын жасаймыз.

1. Дескриптор құрыңыз.

Дескриптордың құрылымын өзгертейік (usbdsc.h файлы)

Құрылғының әрқайсысының бір соңғы нүктесі бар 2 интерфейсі болады.

#define CFG01 rom struct \ ( USB_CFG_DSC cd01; \ USB_INTF_DSC i00a00; \ USB_HID_DSC hid_i00a00; \ USB_EP_DSC ep01i_i00a00; \ USB_INTF_DSC \ hid_ USB_EPD_0; USB_INTF_DSC \ USB_EP10_0 ep02i_i01a00; \ ) cfg01
  1. Өзгертілген құрылымға сәйкес usbdsc.c файлындағы дескрипторды өзгерту керек.
  2. usbcfg.h файлында интерфейс идентификаторларын, пайдаланылған соңғы нүктелерді және есеп дескриптор өлшемдерін анықтаңыз.
  3. hid.c файлында қосымша соңғы нүктелерді (HIDInitEP функциясында) инициализациялау және HID сұрауларын өңдеу функциясын өзгерту қажет (USBCheckHIDrequest функциясы).
  4. Әрбір құрылғы, тінтуір және джойстик, әрқайсысы деректерді өзінің соңғы нүктесіне жіберуі керек. Сондықтан, деректерді белгілі бір соңғы нүктелерге тасымалдау үшін функцияларды қосу және қажетті соңғы нүктенің бос екенін тексеру керек (hid.c файлындағы mHIDTxIsBusy және HIDTxReport ұқсас функцияларды қосыңыз).

Содан кейін тінтуір үшін деректерді беру келесідей болады

Жобаны құрастырып, контроллердің микробағдарламасын жыпылықтап, құрылғыны USB-ге қосқаннан кейін компьютер жаңа құрама құрылғыны анықтайды және тінтуір мен джойстик қосады.


Күріш. 16


Күріш. 17

Құрама HID құрылғысының бастапқы кодтары.

Түсініктеме.Жаңа құрылғыны жасау немесе жүйеден бірдей PID бар алдыңғы құрылғыны жою кезінде PID кодын өзгертуді ұмытпаңыз.

4-сабақ. PICkit2 программистімен эксперименттер

Microchip Technology Inc. арзан әзірлеуші ​​бағдарламашыны шығарады PICkit2, ол негізінен Flash контроллерлерін бағдарламалау үшін қолданылады. Бұл бағдарламашының ерекшелігі - микроконтроллерге арналған микробағдарлама үшін толық құжаттама мен бастапқы кодтардың және компьютерге арналған қабық бағдарламасының болуы. PICkit2 USB-ден қуат алады, реттелетін бағдарламалау мен қуат кернеулерін жасайды, сонымен қатар бағдарламаланатын құрылғыға қосылу үшін 3 кіріс-шығыс желісі бар. Бағдарламалаушының микробағдарламасын жаңартуға мүмкіндік беру үшін PICkit2-де жүктеуші бағдарламасы бар.


Күріш. 18

PICkit2 негізіндегі CDC құрылғысы

PICkit2 бағдарламалаушысына негізделген осы мүмкіндіктердің барлығын пайдалана отырып, кез келген уақытта бағдарламалаушы функцияларына оралу мүмкіндігімен өзіңіздің USB құрылғыңызды жасауға және жөндеуге болады. Бағдарламалаушыға жыпылықтайтын жүктегішті пайдаланып, басқа бағдарламаларды PICkit2 ішіне жыпылықтай аласыз, мысалы, виртуалды COM портын қолдау бағдарламасы. Ол үшін CDC мысалын алыңыз, жобаның атын өзгертіңіз және келесі әрекеттерді орындаңыз

  1. main.c файлында микробағдарлама орнының мекенжайын өзгертеміз (PICkit2 жүктеушісі басқаруды 0x002000 мекенжайына пайдаланушы бағдарламасына береді.
    #прагма коды _RESET_INTERRUPT_VECTOR = 0x002000
  2. io_cfg.h файлында D порты туралы барлығын алып тастаймыз (Сіз PORTC0 параметрінде ЖШД жыпылықтауын орнатуға болады).

    PICKIT2 әрқашан USB-ден қуат алатындықтан, біз орнаттық

    #define usb_bus_sense 1 // құрылғы әрқашан қосылып тұрады #define self_power 0 // құрылғы USB арқылы қуат алады

  3. usbcfg.h файлында біз 2 жолға түсініктемелер қоямыз
    //#USE_SELF_POWER_SENSE_IO анықтау //#USE_USB_BUS_SENSE_IO анықтау
  4. user.c файлында біз USB-ге қажетті деректерді шығарамыз
  5. pickit2.lkr сілтеме файлын қосыңыз

Осыдан кейін сіз жобаны құрастырып, PICkit2 қабығы арқылы жаңа микробағдарламаны жүктей аласыз.

PICkit2-ні қайта бағдарламалағаннан кейін компьютер жаңа COM портының пайда болуын анықтайды және гипертерминал арқылы PICkit2 виртуалды COM порты арқылы деректерді жіберетінін көреміз.

Бұл мысалдың бастапқы коды мына жерден қол жетімді сілтеме.

Осы мысалға сүйене отырып және PICkit2 бағдарламашысының сыртқы түйреуіштерін пайдалана отырып, деректерді сыртқы құрылғылардан алуға және оны USB арқылы компьютерге тасымалдауға болады. Осылайша, PICkit2 көмегімен деректерді COG LCD индикаторларына, I2C, SPI оқырмандарына және температура сенсорлары және басқа құрылғылар сияқты 1 сымды құрылғыларға шығаруға болады.

PICkit2 негізіндегі радио HID пернетақтасы


Күріш. 19

PICkit2 бағдарламашысын «орынсыз» пайдаланудың тағы бір мысалын - радиоинтерфейсі бар пернетақта эмуляторын қарастырайық. Мұндай құрылғыны, мысалы, презентациялар үшін – компьютерден тыс слайдтарды айналдыру үшін пайдалануға болады.

Мұндай құрылғыны іске асыру үшін бізге қажет:

  • PICkit2
  • PICkit2 демонстрациялық тақтасы (DV164120)
  • rfPICkit ішінен радиоқабылдағыш (rfRXD0420) және радио таратқыш (rfPIC12F675).

Радиоқабылдағышты демонстрациялық тақтаға қосамыз. Тақтадағы микроконтроллер қабылдағыштан мәліметтерді қабылдайды, оны өңдейді және радио перне фобындағы екі түйменің бірі басылғанын анықтаған кезде PICkit2-ге қосылған 2 түйреуіштің біріне log.1 деңгейін орнатады.

PICkit2 келесі функцияларды орындайды:

  • компьютерге USB арқылы қосылғанда, ол HID пернетақтасы ретінде анықталады
  • ресивермен демонстрациялық тақта үшін +5В қоректену кернеуін жасаңыз
  • ресивер контроллерінің 2 сыртқы шығысын сұраңыз және журнал бар болса. 1 Компьютерге PageUp немесе PageDown түймелерін басу кодтарын жіберіңіз.

PICKit2 негізіндегі екі виртуалды COM порты (FTDI2232 чип эмуляциясы).

Бұл мысал тек USB қалай жұмыс істейтінін білуге ​​арналған. Қолданар алдында FTDI жүргізуші лицензиясының талаптарын қарап шығыңыз!

Мысал USB порты бар микроконтроллер негізінде 2 виртуалды COM портын қалай жасау керектігін көрсетеді. Алдымен FTDI2232 чипіне арналған драйверлерді орнату керек. Содан кейін, PICkit2 ішіне жүктеу үшін PICkit2 қабықшасында микробағдарламаны жаңарту элементін таңдап, TestVCP2.hex файлына нұсқау қажет. мұрағат. PICkit2 қайта бағдарламалағаннан кейін жүйеңізде 2 тәуелсіз сериялық COM порты болады.

Мысал сайттан алынды http://forum.microchip.com/tm.aspx?m=261649

PICkit2-ні бағдарламашы ретінде қалпына келтіру үшін PICkit2-ні USB-ден ажыратып, түймені басқан кезде USB кабелін қайта жалғап, бағдарламалаушының стандартты микробағдарламасын жүктеуді таңдау керек.

Жоғарыдағы барлық мысалдар MCHPFSUSB Framework v1.3 негізінде жасалған. USB OTG бар PIC24 және PIC32 контроллерлерінің пайда болуымен Microchip стектің жаңа нұсқасын шығарды - USB стек v. 2.x.

USB стекінің жаңа нұсқасында v. 2.3, USB клиентінің функционалдығын жүзеге асыратын USB құрылғыларының стектеріне, хосттың функционалдығын жүзеге асыратын USB енгізілген хостына қоса, хосттың да функцияларын жүзеге асыратын USB қос рөлді стегі де шығарылды. клиент; және USB OTG, Host Negotiation Protocol (HNP), Session Request Protocol (SRP) қолдайтын және USB OTG спецификациясына толығымен сәйкес келеді. Қолданба мысалдарында орындалды:

  • Енгізілген хост
    • Принтер класының хосты - ESC/POS, PostScript® және PCL5 принтерлеріне қолдау көрсету
    • CDC класының хосты - ACM (дерексіз басқару үлгісі) құрылғыларын қолдау
    • HID пернетақтасы
  • Құрылғы
    • HID жүктеушісі - PIC32MX460F512L және PIC18F14K50 отбасыларына қолдау қосылды
    • HID пернетақта, тінтуір
    • MSD ішкі флэш демо – файлдарды сақтау үшін ішкі флэшті пайдалану
    • MSD + HID композиттік мысалы - композиттік MSD және HID құрылғысының мысалы
    • CDC - COM порт эмуляциясы
    • Барлық ДК демо жобалары үшін PIC32MX460F512L отбасылық қолдау
    • HID, MCHPUSB және WinUSB мысалдары енді автоматты анықтау үшін Microsoft Plug-and-Play (PnP) мүмкіндігін қолдайды.
  • Құжаттама
    • барлық API интерфейстерінің толық сипаттамасы "\Microchip\Help" қалтасында орналасқан

Microchip ең танымал USB сыныптары үшін тегін драйверлерді ұсынады:

  1. Пайдаланушы интерфейсі (HID). Бұл алмасу режимі барлық дерлік пернетақталарда, тышқандарда және басқа енгізу/шығару құрылғыларында қолданылады
  2. Коммуникациялық құрылғы (CDC). Бұл режим RS-232 сериялық интерфейсінен USB-ге ауысудың ең оңай түрі. WinXP/2K бар компьютерлерде микроконтроллер қосылған кезде виртуалды COM порты жасалады және эмуляцияланады. COM1.. 4 порттарымен жұмыс істейтін бағдарламалар виртуалды портпен өзгеріссіз жұмыс істейді, бірақ жоғары жылдамдықта (шамамен 1 Мбит/с)
  3. Массалық сақтау құрылғылары (MSD). Бұл ақпаратты сақтау құрылғылары ретінде жұмыс істейтін құрылғылар - флэш-дискілер, SD/MMC карталары, дискілер және т.б.
  4. Принтер класының құрылғылары. Бұл режим USB модулі бар PIC микроконтроллеріндегі соңғы құрылғыға қажетті ақпаратты тікелей USB принтеріне шығаруға мүмкіндік беретін USB принтерлерін пайдалануға арналған.
  5. Микрочиптің резиденттік жүктеушісі. Ең қарапайым режим, ол тек USB арқылы микроконтроллердің бағдарламалық жасақтамасын жаңарту үшін қолданылады. ДК жағында драйверге ұқсас шағын бағдарлама орнатылған
  6. Жеке драйвер (Таңдамалы). Жетілдірілген пайдаланушылар үшін USB2.0 ресурстарын барынша толық пайдалану: шинаның жұмыс режимдерін таңдау мүмкіндігі (изохронды, үзіліспен басқарылатын, көлемдік, басқару), жоғары тасымалдау жылдамдығы. Автобустың жұмысы және Windows бағдарламалық жасақтамасын әзірлеу дағдылары туралы терең білімді талап етеді

USB флэш-дискісі бар жүктеуші

Кәдімгі флэш-дискіден микробағдарламаны жаңарту.

USB-OTG модулі (PIC24 немесе PIC32) бар микроконтроллердің микробағдарламасын жаңарту үшін арнайы бағдарламалық құралды пайдалану қажет емес. Хост режимінің болуы кәдімгі USB деректерді сақтау құрылғыларын (Flash Drive) микроконтроллерге қосуға мүмкіндік береді. Мысал Microchip веб-сайтында жарияланған ( бета нұсқасы), ол қосылған USB дискісінен микроконтроллер бағдарламалық құралын жаңартуға мүмкіндік береді.

Мысалды іске қосу үшін жүктеуші микробағдарламасын PIC32 USB тақтасына немесе Explorer 16 (PIC32 USB PIM процессор модулі орнатылған және USB PICtail Plus енші тақтасы бар) жүктеп алу керек. Түймені басқан кезде тақтаға қуат берсеңіз, контроллер микробағдарламаны жаңарту режиміне өтеді. Егер сіз қазір жазылған микробағдарламаны жаңарту файлы бар флэш-дискіні қоссаңыз, микроконтроллер бұл файлды оқып, оны бағдарлама жадына қайта жазады.

USB әзірлеу тақталары және әзірлеу құралдары

PICkit2 бағдарламашы-отладчик (тапсырыс нөмірі PG164120)

Жүктеуіштің болуы USB дағдыларын меңгеру үшін өзіңіздің бағдарламалық жасақтаманы жүктеп салуға мүмкіндік береді


Күріш. 20

PICDEM FS-USB әзірлеу тақтасы (тапсырыс нөмірі DM163025)

USB2.0 шинасы бар PIC18F4550 микроконтроллері негізіндегі құрылғыларды әзірлеуге және көрсетуге арналған. Тақтада TQFP44 бумасындағы PIC18F4550 контроллері бар.


Күріш. 21

Төмен PIN саны USB әзірлеу жинағы (тапсырыс нөмірі DM164127)

Low Pin Count USB әзірлеу жинағы Microchip PIC18F14K50 және PIC18F13K50 20 істікшелі USB микроконтроллерлерінің микроконтроллерінің мүмкіндіктерін бағалаудың оңай жолын қамтамасыз етеді. Жинақ USB контроллерлерін (бағдарламалық құрал, бастапқы файлдардың мысалдары, құжаттама) пайдалануды бастау үшін қажет нәрсенің барлығын қамтиды.


Күріш. 22

PIC18F87J50 толық жылдамдықты USB PIC18F87J50 FS USB демо тақтасы (тапсырыс нөмірі MA180021)

PIC18F87J50 FS USB демо тақтасы PIC18F87J50 жанұясының толық жылдамдықты USB 2.0 микроконтроллерлерін жөндеу үшін пайдаланылады. Автономды жұмыс істеуден басқа, тақтаны PIC18 Explorer тақтасы үшін процессор модулі ретінде де пайдалануға болады.


Күріш. 23

PIC24 бастапқы жинағы (тапсырыс нөмірі DM240011)

PIC24F бастапқы жинағы өнімділігі жоғары PIC24F контроллерлер тобын пайдалануды бастау үшін қажет нәрсенің барлығын қамтиды. Бұл арзан жинақта кіріктірілген контурлық отладчик және бағдарламашы, USB интерфейсі бар PIC24F контроллері (тақтада хост және құрылғы функцияларын орындауға болады), үш түсті жарық диоды, сыйымдылық сенсорлық панелі және графикалық OLED дисплейі бар. . Графикалық мәзір арқылы демонстрациялық бағдарлама деректерді сыртқы USB флэш-дискісіне жазуға, сенсорлық панельді конфигурациялауға және графикалық тапсырмаларды орындауға мүмкіндік береді.


Күріш. 24

PIC32 USB тақтасы (тапсырыс нөмірі DM320003)

PIC32 контроллерлерінде USB-OTG модулін меңгеруге мүмкіндік береді


Күріш. 25

"Explorer 16 Development Board" әзірлеу тақтасы (тапсырыс нөмірі DM240001)

Бұл 16-биттік микроконтроллерлер мен dsPIC33F цифрлық сигнал өңдеу контроллерлерінің жоғары өнімді PIC24 тобымен жұмыс істеуге және іске қосуға арналған арзан жөндеу құралы.


Күріш. 26

"USB PICtali Plus" аналық тақтасы (тапсырыс нөмірі AC164131)

USB процессорының Plug-In модульдерімен бірге ол USB құрылғыларын Хост, Құрылғы, USB-OTG әзірлеуге және жөндеуге мүмкіндік береді.


Күріш. 27

Илья Афанасьев,
Компания

Минималдыдан бастайық:
18f2455 қамтиды -- пайдаланылған MK кітапханасы
--
enable_digital_io() -- барлық кірістерді сандық режимге ауыстыру
--
бүркеншік атТүйме болып табылады pin_B7 -- бізде түйме қосылғандықтан, оны жариялайық
pin_B7_direction = енгізу -- біздің түйме кіру үшін жұмыс істейді
--
-- бір жол - бізде USB CDC-мен жұмыс істеу үшін қажет нәрсенің бәрі бар
usb_serial қосу -- USB-мен жұмыс істеуге арналған кітапхана
--
usb_serial_init() -- --USB CDC инициализациясы
мәңгілік цикл-- үздіксіз орындалатын негізгі цикл
usb_serial_flush() -- USB жаңартуы. Бұл процедура барлық қажетті әрекеттерді орындайды
-- ДК-мен байланысты сақтау әрекеттері
соңғы цикл

Осы кодты құрастыру, алынған HEX файлын жүктеуші арқылы MK-ға жазу және құрылғыны іске қосу арқылы жүйеде жаңа құрылғының қалай анықталғанын байқауға болады: Виртуалды com порты.

Құрылғы қазірдің өзінде жұмыс істеп тұрғандықтан, оны сөйлесуге үйретейік.

Алынған байтты оқу үшін функция бар usb_serial_read(байт ) : логикалық. Егер қабылданған байт болса, ол оны көрсетілген айнымалы мәнде сақтайды және қайтарады рас, әйтпесе қайтарады жалған.

Байтты жіберу процедурасы бар usb_serial_data. Ол айнымалы ретінде жасырылған, сондықтан байтты жіберу үшін оған жіберілетін байттың мәнін тағайындау жеткілікті.

Негізгі цикл алдында байт өлшемді айнымалыны жариялайық, негізгі циклде қабылданған байттардың бар-жоғын тексереміз, егер олар бар болса, оларды кері жіберіңіз.

18f2455 қамтиды
--
enable_digital_io()
--
бүркеншік атТүйме болып табылады pin_B7
pin_B7_direction = енгізу
--
--
usb_serial қосыңыз
--
usb_serial_init()
var байтб -- айнымалыны жариялау
мәңгілік цикл-- негізгі цикл
usb_serial_flush()
егер(usb_serial_read(ch)) содан кейін-- егер байт алынса, ол ch-ге жазылады
usb_serial_data = ch -- қабылданған байтты кері жіберіңіз
аяқталса
соңғы цикл

Біз құрастырамыз, түймені басып тұрамыз, қуат көзін өзгертеміз, жүктегішті іске қосамыз, микробағдарламаны өзгертеміз, іске қосамыз.
Құрылғы жүйеде қайтадан анықталды, енді құрылғының жұмысын тексеру үшін бағдарламалық құрал қажет.

Өзіміз болмаса да, біз дайын терминалды қолданамыз: мен RealTerm бағдарламасын қолдандым.
Қажетті нөмірмен портты ашып, деректерді жіберіңіз.


Ал біз жібергенімізді қайтарамыз. Бұл бәрі дұрыс жұмыс істеп тұрғанын білдіреді.

Бағдарламалық қамтамасыз ету

Сонымен, біздің микроконтроллер байттарды қабылдап, оларды бірден кері жібере алады. Енді онымен байланысу үшін өзіміздің бағдарламалық жасақтаманы жазайық (мен Delphi-ді қолданамын).

Біз жасаймыз жаңа жоба, біз қажетті компоненттерді пішінге сәйкес таратамыз:
SpinEdit1 - порт нөмірін көрсету үшін
Түйме 1 - байланыс орнату
Түйме 2 - ажырату үшін
SpinEdit2 - байттарды ондық түрде енгізуге арналған
Түйме 3 - байтты жіберу үшін
Memo1 - қабылданған ақпаратты көрсетуге арналған.

Жоғарыда айтылғандай, com портымен кәдімгі мәтіндік файл сияқты жұмыс істеу керек: CreateFile, WriteFile және ReadFile функцияларын пайдалану.

Егжей-тегжейлерге тоқталмай, com портымен жұмыс істеуге арналған дайын кітапхананы алайық: ComPort.

Біз әрбір түймеге қажетті тапсырманы тіркеп, соңғы кодты аламыз:

бірлік Unit1;

интерфейс

Қолданады
Windows, хабарлар, SysUtils, нұсқалар, сыныптар, графика, басқару элементтері, пішіндер,
Диалогтар, StdCtrls, Spin, ComPort;

Түр
TForm1 = сынып (TForm)
SpinEdit1:TSpinEdit;
1 түймесі: TB түймесі;
2 түймесі: TB түймесі;
SpinEdit2:TSpinEdit;
Түйме 3: TB түймесі;
Memo1: TMemo;
процедурасы OnRead(Жіберуші: TObject; ReadBytes: байт массиві );
процедура Button1Click(Жіберуші: TObject);
процедура Button2Click(Sender: TObject);
процедурасы FormDestroy(Жіберуші: TObject);
процедура Button3Click(Жіберуші: TObject);
жеке
(Жеке декларациялар)
Порт: TComPort;
қоғамдық
(Жария декларациялар)
Соңы;

var
Пішін1: TForm1;
сан:бүтін;
жүзеге асыру

TForm1.Button1Click процедурасы(Жіберуші: TObject);
БАСТА
Порт:= TComPort.Create(SpinEdit1.Value, br115200); //байланыс құру
Port.OnRead:= OnRead; //қабылданған деректерді оқу үшін ағын жасау
Button2.Enabled:= true ; //қосылымды жабу үшін түймені белсендіріңіз
Соңы;

TForm1.Button2Click процедурасы(Жіберуші: TObject);
БАСТА
Port.Free; //байланысты жабыңыз
Button2.Enabled:= false ; // түймені өшіру
Соңы;

TForm1.Button3Click процедурасы(Жіберуші: TObject);
БАСТА
Button2.Enabled болса, Port.Write();
Соңы;

TForm1.FormDestroy процедурасы(Жіберуші: TObject);
БАСТА
Егер Button2.Enabled болса
Port.Free;
Соңы;

TForm1.OnRead процедурасы(Жіберуші: TObject; ReadBytes: байт массиві );
var
i:бүтін;
БАСТА
i үшін:= Төмен(ReadBytes) және Жоғары(ReadBytes) орындаңыз //қабылданған байттар массивінен өту
БАСТА
Memo1.Text:= Memo1.Text + "." +InttoHex(ReadBytes[i],2); // терезеге оның HEX мәнін қосыңыз
inc(сан); //қабылданған байттардың санын санау
Соңы;
егер сан > 10 болса, бастаңыз
Memo1.Lines.Add("" ); // жолды орау
сан:= 0;
Соңы;
Соңы;

Біз іске қосамыз, байланыс орнатамыз, байттарды жібереміз:

Сонымен, біздің қарапайым терминал ең қарапайым USB құрылғысымен жұмыс істеуге дайын.

Көріп отырғаныңыздай, оқу және жазу динамикалық байт массивтерінде орын алады.

Алынған ақпаратты өңдеу арқылы ағымдағы тапсырмаға қолайлы қажетті алмасу протоколын жасауға болады.

18f2455 қамтиды
--
enable_digital_io()
--
бүркеншік атТүйме болып табылады pin_B7
pin_B7_direction = енгізу
--
--
usb_serial қосыңыз
--
usb_serial_init()
var байтб
var байтмен -- екінші айнымалыны жариялаңыз
мәңгілік цикл-- негізгі цикл
usb_serial_flush()
егер(usb_serial_read(ch)) содан кейін-- егер байт алынса, қажетті әрекеттерді орындаңыз
іс ch -- байт нөмірі бойынша цикл
0 : usb_serial_data = 0xff
1 : usb_serial_data = Түйме -- жіберу түймесінің күйі
Әйтпесе блок-- басқа нәрсе алынса
үшін 16 пайдаланумен цикл-- 10 байт деректерді жіберу
usb_serial_data = ch +i -- ch-ден ch+15-ке дейін
соңғы цикл
соңғы блок
соңғы іс
аяқталса
соңғы цикл

Қосымша мүмкіндіктер

Егер біз осы жерде тоқталсақ, біз Интернетте көп болатын кітапхананы пайдалану мысалының егжей-тегжейлі сипаттамасы бар тұрақты мақаланы аламыз. Сондықтан мен аздап тереңірек ақпарат қосамын.

Деректерді жіберуді жеңілдету

Ақпаратты бір байтпен жіберу әрқашан қолайлы бола бермейді. Кітапхана өте жиі көмекке келеді басып шығару. Ол барлық мүмкін болатын ұзындықтағы деректерді барлық мүмкін форматтарда жіберу процедураларын қамтиды: байт, он алтылық, дек, бин, логикалық, бұл бағдарламадағы мәліметтерді шығаруды жеңілдетеді.
>басып шығаруды қамтиды
...
var dwordдеректер
print_dword_hex(usb_serial_деректер, деректер)

Барлық командалардың атауларын кітапхана файлынан табуға болады.

Компьютерге қосылуды күтуде

Егер микроконтроллердің негізгі циклін бастамас бұрын алдымен ДК-мен байланыс орнату қажет болса, онда оның алдына жолдарды қосуға болады.
кезінде(usb_cdc_line_status() == 0x00) цикл
соңғы цикл

Құрылғыға порт нөмірін тағайындау

Егер сіз бәрін сол күйінде қалдырсаңыз, жүйе әрбір жаңа қосылыммен бірінші бос порт нөмірін бөледі. Бұл сіз оны үнемі қадағалап отыруыңыз керек дегенді білдіреді.
Мұның алдын алу үшін USB кітапханасын қоспас бұрын құрылғыға бірегей сериялық нөмірді тағайындау керек:
Сан кез келген ұзындықта болуы мүмкін және әр түрлі таңбалардан тұрады.
const байт USB_STRING3 =
{
24 , -- массив ұзындығы
0x03, -- bDescriptorType
"0" , 0x00,
"1" , 0x00,
"2" , 0x00,
"3" , 0x00,
"4" , 0x00,
"5" , 0x00,
"6" , 0x00,
"7" , 0x00,
"8" , 0x00,
"9" , 0x00,
"X", 0x00
}

Құрылғы атауын өзіңіздікіне өзгертіңіз

Драйверлерді орнатпас бұрын жүйеде көрінетін құрылғы атауын сериялық нөмір сияқты атаумен жариялау арқылы өзгертуге болады.
const байт USB_STRING2 =
{
28 , --
0x03, -- bDescriptorType
"D", 0x00,
"е", 0x00,
«м», 0x00,
«о», 0x00,
" " , 0x00,
«Б», 0x00,
«о», 0x00,
«а», 0x00,
«р», 0x00,
"d", 0x00,
" " , 0x00,
"=" , 0x00,
")" , 0x00
}

Өкінішке орай, драйверлерді орнатқаннан кейін құрылғы өз атауын .inf файлында көрсетілгенге өзгертеді, сондықтан біз атауды сол жерде де өзгертеміз.


СИПАТТАМАСЫ = "Демо CDC"

Біз құрылғыны автоматты түрде қосуды ұйымдастырамыз

Өкінішке орай, бұл тапсырманы орындаудың тікелей жолдары жоқ, сондықтан шығармашылықпен айналысуға тура келеді.

Ең алдымен, жүздеген басқа стандартты CDC микробағдарламаларының арасында оңай анықтау үшін құрылғыңызға бірегей өндіруші мен өнім мәнін тағайындауыңыз керек.
VID және PID ақша үшін беріледі, сондықтан қытайлықтардың жолын ұстанайық: анық еркін құндылықтарды тыныш қабылдаңыз.

Микробағдарлама:
Микробағдарламада USB кітапханасын қоспас бұрын екі айнымалы мәнді жариялау қажет

const сөз USB_SERIAL_PRODUCT_ID = 0xFF10
const сөз USB_SERIAL_VENDOR_ID = 0xFF10

FF10 орнына кез келген екі сөзді (2 байт) енгізуге болады. Соңғы нәтиже қоса берілген мұрағатта қамтылған.

Жүргізушілер:
Драйверлер VID және PID комбинациясы үшін жасалмағандықтан, біз мәндерімізді .inf файлына қолмен қосамыз:


%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10


%DESCRIPTION%=DriverInstall, USB\VID_FF10&PID_FF10

Бағдарламалық қамтамасыз ету:
Құрылғыны қосу/ажырату оқиғаларын ұстау үшін ComponentUSB кітапханасын қосайық. Әрбір жолды түсіндірудің қажеті жоқ деп ойлаймын: барлық өзгерістерді қоса берілген жобада көруге болады.

Нәтиже

Скриншотта оны көру қиын, бірақ жіберу түймесі қосылған құрылғы болған кезде ғана белсенді болады және бағдарлама әрбір 50 мс сайын түйменің күйін алуға сұраныс жібереді (бірақ бұл дұрыс емес, себебі түймені басу өңделуі керек) МК бойынша).

Көріп отырғаныңыздай, USB арқылы МК мен ДК арасында деректер алмасуды ұйымдастыру ең қиын міндет емес. Алынған қосылымды тек соңғы мақсаттар үшін ғана емес қолдануға болады: ол бағдарламаны жөндеуге де жарамды. Өйткені, есептеу нәтижелерін және регистрлер мен айнымалылардың ағымдағы күйлерін компьютерге жіберу Морзе кодындағы жарық диодтарының жұбын жыпылықтағаннан әлдеқайда анық.

Соңында: көңіл-күй шамының бастапқы кодын қарауға кеңес беремін. Онда ыңғайлы алмасу протоколын ұйымдастыру үшін алынған деректерді өңдеудің өте жақсы нұсқасын таба аласыз.

Параметрлер