استفاده عملی از رابط USB در کنترلرهای PIC. برنامه نویسی دستگاه های USB ساده در دلفی نام دستگاه را به نام خود تغییر دهید

همانطور که قبلا ذکر شد، سیستم عامل های ویندوز پشتیبانی نرم افزاری را برای عملکرد دستگاه های متصل به گذرگاه USB ارائه می دهند. پردازش جریان های داده دستگاه های USBدر سطح سیستم عاملمجموعه ای از درایورهای استاندارد را پیاده سازی می کند که عملکردهای اساسی مدیریت همه دستگاه های USB و تبادل داده بین آنها و سیستم را انجام می دهد.

اگر نیاز دارید بنویسید نرم افزاربرای هر دستگاه USB که قابلیت های پردازش داده خود را گسترش می دهد، می توانید یکی از سه مسیر ممکن را انتخاب کنید:

درایور دستگاه خود را بنویسید که تمام عملکردهای کنترل و تبادل داده لازم را ارائه می دهد و برنامه ای که با این درایور در حالت کاربر تعامل داشته باشد. در این حالت ، می توانید کاملاً از درایورهای استاندارد سیستم صرف نظر کنید.

یک درایور فیلتر بنویسید که عملکرد مورد نیاز را ارائه کند، اما در پشته درایور بالای درایورهای سیستم قرار گیرد. بنابراین، تمام عملکردهای پردازش استاندارد توسط درایورهای USB انجام می شود. توسط سیستم نصب شده استو عملکردهای اضافی توسط درایور فیلتر شما ارائه می شود که برنامه کاربر با آنها تعامل خواهد داشت.

از مزیت های توزیع آزادانه توابع و کتابخانه های درایور استفاده کنید

mi برای دسترسی به دستگاه USB.

در بیشتر موارد دسترسی برنامه ایاگر دستگاه عملکرد بسیار خاصی را انجام دهد، ممکن است به یک دستگاه USB نیاز باشد. به عنوان مثال، «اسیلوسکوپ‌های الکترونیکی» یا سیستم‌های جمع‌آوری داده‌های مبتنی بر USB توسعه یافته‌اند که برای کارکردن نیاز به دسترسی به خود دستگاه دارند. در بیشتر این موارد، می‌توانید از کتابخانه‌های توابع توزیع شده آزاد استفاده کنید که تقریباً در همه محیط‌های برنامه‌نویسی محبوب کار می‌کنند. به عنوان مثال، تحت نظارت گنو، نرم افزاری به نام LibUsb توسعه یافته است که شامل درایورها و کتابخانه های عملکردی لازم برای اجرا در سیستم عامل های ویندوز و لینوکس می باشد. این کتابخانه‌های تابع بسیار محبوب هستند و به شما امکان می‌دهند تا به سرعت برنامه‌هایی را توسعه دهید که با استفاده از مجموعه‌ای از توابع استاندارد با دستگاه شما تعامل دارند. این امر نیاز به نوشتن درایور دستگاه خود را از بین می برد که باعث صرفه جویی در زمان می شود.

علاوه بر این، اکثر کاربران با تکنیک های توسعه درایور آشنا نیستند،

این یک منطقه بسیار پیچیده از برنامه نویسی است، بنابراین در دسترس بودن چنین نرم افزارهای توزیع شده رایگان کمک ارزشمندی را به طیف گسترده ای از کاربران ارائه می دهد. بر اساس پروژه LibUsb، wrapperها برای کار با آنها توسعه داده شده است ویژوال بیسیکدات نت و سی شارپ دات نت که محبوب ترین آنها LibUsbDotNet است که تحت نظارت نرم افزار رایگان نیز توسعه یافته اند. با وجود پیچیدگی ظاهری برنامه‌نویسی دستگاه‌های USB، نرم‌افزار ذکر شده این کار را بسیار ساده می‌کند که حتی مبتدیان هم می‌توانند آن را انجام دهند. بیایید به مثال های عملی نحوه کار با دستگاه های USB خود نگاه کنیم و با بسته نرم افزاری LibUsb شروع کنیم. به هر حال، نرم افزار فوق را می توان به صورت رایگان از www.sourceforge.net یا از سایت های متعدد تکراری دانلود کرد.

چگونه با کتابخانه های عملکرد USB LibUsb کار کنیم؟ کتابخانه به این شکل ساخته شده است

تا بتوانید عملیات اساسی مربوط به دستگاه USB را انجام دهید:

شناسایی یا به عبارت دیگر شمارش. هنگام انجام این عملیات، دستگاه های متصل به گذرگاه USB شناسایی می شوند که با استفاده از عملکردهای مربوطه کتابخانه libusb انجام می شود.

به دست آوردن پارامترهای دستگاه (شناسه های دستگاه، داده های مربوط به سازنده و ویژگی های دستگاه)، که کتابخانه دارای تعدادی عملکرد است.

باز کردن، بستن، خواندن و نوشتن داده ها، ارسال دستورات. یک دستگاه USB، مانند سایر اشیاء سیستم فایل، قابل دسترسی به خواندن-نوشتن است که با استفاده از توابع کتابخانه مناسب انجام می شود.

همه ویژگی‌های فوق را می‌توان با فراخوانی توابع کتابخانه libusb مناسب پیاده‌سازی کرد، اما در اینجا فهرست نمی‌شوند زیرا فضای زیادی را اشغال می‌کند. ما نحوه استفاده از برخی از این ویژگی ها را بررسی خواهیم کرد

برنج. 6.10

محل درایور libusb0.sys در پشته درایور دستگاه

با استفاده از مثال های عملی. خوانندگان می توانند شرحی از تمام عملکردها را در اسناد مربوطه بیابند. یادآوری می کنم که ما در حال بررسی استفاده از توابع کتابخانه libusb در سیستم عامل های ویندوز هستیم.

هنگام نصب توزیع با libusb در سیستم عامل ویندوز، درایور فیلتر libusb0.sys بر روی سیستم نصب می شود. این درایور در بالای پشته درایور سیستم قرار خواهد گرفت که به راحتی قابل مشاهده است، برای مثال، با مشاهده اطلاعات درایور برای هر دستگاه USB (شکل 6.10).

علاوه بر این، برای دسترسی به درایور از برنامه های کاربری، کتابخانه libusb0.dll در سیستم نصب شده است که با استفاده از آن می توانید برنامه های کاربری را توسعه دهید.

برنج. 6.17

هنگام حذف نصب، پنجره برنامه را مشاهده کنید

دستگاه های USB از سیستم

معرفی
این کتاب مال کیه؟
آنچه در کتاب خواهید یافت
نرم افزار مورد نیاز
الزامات سخت افزاری
در باره کد برنامه
شرح مختصری از فصول
تعیین ها
قدردانی
بازخورد
بخش اول: درک 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. شناسه های دستگاه USB PnP
1.3.4. نام دستگاه های نمادین
1.4. مدل WDM
فصل 2: ​​برنامه نویسی C برای میکروکنترلر
2.1. اطلاعات کلی در مورد زبان C برای میکروکنترلرها
2.2. استفاده کتابخانه های استاندارد
2.3. برنامه نویسی برای AT89S5131
2.3.1. فایل مقداردهی اولیه
2.3.2. ساختارهای توصیفگر
2.3.3. ساختار پروژه
فصل 3. ابزار
3.1. برنامه نویسان
3.1.1. برنامه نویس فلیپ
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. ابزارهای مایکروسافتویژوال استودیو
3.3.1. واکر واکر
3.3.2. جستجوی خطا
3.3.3. GuidGen
3.4. ابزارهای مایکروسافت 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. چکلنف و جنلنف
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 Tools
3.11. برنامه نظارت بر سگ شکاری اتوبوس
فصل 4. اصول استفاده از توابع Win32 در NET
4.1. اطلاعات کلی
4.2. وارد کردن توابع Win32
4.3. سازه های
4.3.1. ویژگی StructLayout
4.3.2. ویژگی MarshalAs
4.4. دسترسی مستقیم به داده ها
4.5. رفتار پیام های ویندوز
4.6. اطلاعات کلی در مورد WMI
4.7. منابع آنلاین برای این فصل
قسمت دوم. کلاس های 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. پشتیبانی CDC در ویندوز
5.4.1. مروری بر ویژگی های ویندوز برای کار با پورت های سریال
5.4.1.1. عملیات اساسی بندر
5.4.1.2. ویژگی های تنظیم پورت
5.4.1.3. تنظیمات پورت ویژه
5.4.1.4. گرفتن وضعیت خطوط مودم
5.4.1.5. کار با CDC بر روی پلت فرم. خالص
5.4.2. مطابقت بین عملکردهای ویندوز و درخواست های 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. درایورهای دستگاه های HID در ویندوز
فصل 7. سایر کلاس های USB
قسمت سوم. تمرین برنامه نویسی USB
فصل 8. ایجاد یک دستگاه USB بر اساس AT89S5131
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. برنامه نویسی تبادل داده با دستگاه CDC در دلفی
9.5. تبادل برنامه نویسی با دستگاه CDC در سی شارپ
9.5.1. با استفاده از مولفه MSCOMM
9.5.2. استفاده از ویژگی های Win32
9.6. مشکلات CDC
فصل 10. پیاده سازی کلاس HID
10.1. پیاده سازی HID در AT89S5131
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. ویژه ویژگی های ویندوز
11.1. راه اندازی توابع API
11.1.1. شمارش دستگاه های USB
11.1.2. دریافت وضعیت یک دستگاه USB
11.2. شمارش دستگاه های USB با استفاده از WMI
11.3. ویژگی های خاصویندوز 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. رویه ورود راننده
12.1.2. رویه AddDevice
12.1.3. روش تخلیه
12.1.4. رویه های عملیاتی درایور
12.1.4.1. هدر بسته
12.1.4.2. سلول های پشته I/O
12.4.1.3. رویه های عملیاتی درایور
12.1.5. ارائه درخواست های IOCTL
12.2. بارگیری درایور و دسترسی به رویه های راننده
12.2.1. مراحل کار با راننده
12.2.2. ثبت نام راننده
12.2.2.1. ثبت نام با استفاده از SCM manager
12.2.2.2. تنظیمات درایور در رجیستری
12.2.3. با اشاره به رویه های عملیاتی
12.2.4. ذخیره سازی درایور در داخل فایل اجرایی
12.3. ایجاد درایور با با استفاده از درایوراستودیو
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 "Clean".
قسمت چهارم فهرست راهنما
فصل 13. فرمت فایل INF
13.1. ساختار فایل INF
13.1.1. بخش نسخه
13.1.2. بخش سازنده
13.1.3. بخش Dirs مقصد
13.1.3.1. کلید DefaultDescDir
13.1.3.2. کلیدهای بخش فهرست فایل
13.1.3.3. کلید دیرید
13.1.3.4. زیرمجموعه کلید
13.1.4. بخش توضیحات مدل
13.1.5. بخش xxx. AddRegw xxx. DelReg
13.1.6. بخش xxx. LogConfig
13.1.7. بخش xxx. CopyFiles
13.1.8. بخش رشته ها
13.1.9. اتصالات بخش
13.2. ایجاد و تست فایل های INF
13.3. نصب دستگاه ها با استفاده از فایل INF
13.4. کلیدهای رجیستری برای USB
فصل 14: ویژگی های اساسی ویندوز
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: نتیجه یک عملیات ناهمزمان
14.8.1. ارزش برگشتی
14.9. عملکرد DeviceloControl: کنترل مستقیم درایور
14.9.1. ارزش برگشتی
14.10. تابع Cancel/o: عملیات را لغو می کند
14.10.1. ارزش برگشتی
14.11. عملکرد دستگاه Dos را پرس و جو کنید، نام دستگاه را با نام DOS آن دریافت کنید
14.11.1. ارزش برگشتی
14.11.2. تماس مثال
14.12. تعریف عملکرد دستگاه Dos: عملیات با نام دستگاه DOS
14.12.1. ارزش برگشتی
14.12.2. تماس مثال
فصل 15. ساختارها و توابع ویندوز برای پورت های سریال
15.1. ساختار تنظیمات پورت COMMCONFIG
15.2. ساختار مشخصات پورت COMPROP
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: Port State
15.16.1. ارزش برگشتی
15.16.2. تماس مثال
15.17. توابع GetCommTimeouts و SetComniTimeouts: Timeouts پورت
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. ساختارها و توابع 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 Feature: دریافت گزارش ویژگی
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 Value: دریافت و تنظیم مقادیر تبدیل شده
17.21. تابع HidF_MaxUsageListLength: اندازه بافر برای کدهای کلید
17.22. تابع HidP_UsageListDifference: تفاوت بین آرایه ها
برنامه های کاربردی
پیوست 1. توابع اضافی
پیوست 2. گردآوری نمونه در نسخه های دیگر دلفی
پیوست 3. جدول شناسه های زبان (LangID)
پیوست 4. جدول کد سازنده (شناسه فروشنده، شناسه دستگاه)
پیوست 5. نحوه ایجاد میانبر Device Manager
پیوست 6. سوالات متداول
پیوست 7. شرح سی دی
ادبیات
نمایه موضوعی

برنامه نویسی از طریق پورت USB

برنامه نویسی دستگاه برای راه اندازی دیش های ماهواره ای SF-50 از طریق USB با برنامه نویسی از طریق RS-232 تنها در نحوه انتقال داده ها از دستگاه به رایانه و از رایانه به دستگاه متفاوت است. هنگام برنامه نویسی از طریق USB، یک درایو USB قابل حمل (درایو فلش) استفاده می شود. این زمانی راحت است که، به عنوان مثال، رایانه شما یا، اغلب، یک لپ تاپ (نت بوک) دارای پورت سریال RS-232 بر روی شاسی خود نباشد.
برای برنامه ریزی دستگاه با استفاده از درایو USB به موارد زیر نیاز دارید:
- درایو USB (درایو فلش)، فرمت شده در سیستم فایل FAT-32;
- برنامه ویرایشگر AliEditor که در پوشه Database_editor_new قسمت نرم افزار دستگاه OPENBOX SF-50 قرار دارد.

قبل از برنامه نویسی، باید پایگاه داده را از دستگاه به رایانه خود منتقل کنید. برای انجام این کار، دستگاه را روشن کنید، به پورت متصل شوید فلش درایو USB. اجرای MENU - سیستم - ذخیره در USB،

با فشار دادن دکمه MENU تا زمانی که کانال فعلی ظاهر شود، یا تا زمانی که تصویر منوی اصلی هنوز کانالی وجود ندارد، از منو خارج شوید و درایو فلش را بردارید. درایو فلش را در کامپیوتر قرار دهید.
برنامه Editor.exe را از پوشه Database_editor_new اجرا کنید و تصویر روی فلش مموری موجود در آن را باز کنید.

هنگامی که از شما خواسته شد پایگاه داده را انتخاب کنید، پایگاه داده کاربر را انتخاب کنید.

روی OK کلیک کنید. همه خدمات را انتخاب کنید، لیستی از تمام کانال های تلویزیون، رادیو و خدمات اسکن شده و ذخیره شده موجود در پایگاه داده باز می شود.

کانال ها را همانطور که می خواهید ویرایش کنید، برای مثال، فقط کانال ها را باز بگذارید.
در صفحه‌کلید رایانه‌تان، دکمه Shift را نگه دارید، فلش پایین را فشار دهید و کانال‌هایی را که می‌خواهید حذف کنید برجسته کنید. روی Delete کلیک کنید تا مورد انتخاب شده حذف شود.

برای ویرایش تنظیمات ماهواره، All Services – Satellite Information – EUTELSAT W4, W7 را انتخاب کنید، دکمه ENTER را فشار دهید.

در صورت لزوم، مقادیر آنتن 1 را ویرایش کنید.
برای حذف یک ترانسپوندر، فرستنده غیر ضروری را انتخاب کنید و دکمه Delete را روی صفحه کلید رایانه فشار دهید، عملکرد انتخاب شده را تأیید کنید.

برای افزودن یک فرستنده، به نام ماهواره بروید، فشار دهید دکمه سمت راستماوس را انتخاب کنید و Add Information را انتخاب کنید (یا ماهواره را برجسته کرده و دکمه Insert را روی صفحه کلید فشار دهید).

داده‌های فرستنده جدید را وارد کنید، مثلاً آنها را از وب‌سایت lyngsat.com بگیرید.

روی OK کلیک کنید و مطمئن شوید که ترانسپوندر ثبت شده است.

برای افزودن ماهواره، به خط اطلاعات ماهواره بروید، کلید Insert را از صفحه کلید فشار دهید و پارامترهای ماهواره جدید را وارد کنید.

برنامه ویرایشگر را ببندید و درایو را بردارید.
درایو را در دستگاه OPENBOX SF-50 قرار دهید، دنباله MENU - System - Update از USB را دنبال کنید، حالت "SAT&TP List" را انتخاب کنید.

شروع را انتخاب کنید. نیت خود را تأیید کنید.

دستگاه پایگاه داده را به روز می کند و خود را راه اندازی مجدد می کند. پس از راه اندازی مجدد، باید زبان منو را به روشی جدید روی روسی تنظیم کنید. دستگاه را به تنظیمات کارخانه بازنشانی کنید.
با دو بار فشار دادن دکمه MENU از منوی تنظیمات خارج شوید. دکمه OK را در کانال فعلی فشار دهید و مطمئن شوید که لیست کانال ها ویرایش شده است.

همچنین می توانید مطمئن شوید که لیست فرستنده ها و ماهواره ها ویرایش شده است.
برنامه نویسی کامل شد

گذرگاه USB (Universal Serial Bus) در 15 ژانویه 1996 با تایید اولین نسخه استاندارد توسط Intel، DEC، IBM، NEC، Northen Telecom و Compaq ظاهر شد.

هدف اصلی مجموعه استاندارد برای توسعه دهندگان آن ایجاد توانایی برای کاربران برای کار در حالت Plug&Play با دستگاه های جانبی است. این بدان معنی است که دستگاه باید به یک رایانه در حال اجرا متصل باشد، تشخیص خودکاربلافاصله پس از اتصال و نصب بعدی درایورهای مناسب. علاوه بر این، توصیه می شود برق دستگاه های کم مصرف را از خود اتوبوس تامین کنید. سرعت اتوبوس باید برای اکثریت قریب به اتفاق دستگاه های جانبی کافی باشد. کنترل‌کننده USB باید صرف‌نظر از تعداد دستگاه‌های متصل به اتوبوس، تنها یک وقفه را اشغال کند، یعنی مشکل کمبود منابع در گذرگاه‌های داخلی رایانه سازگار با IBM PC را حل کند.

تقریباً تمام وظایف در استاندارد USB حل شد و در بهار 1997 رایانه های مجهز به اتصال دهنده برای اتصالات USBدستگاه ها اکنون USB به طور فعال توسط تولید کنندگان پیاده سازی شده است لوازم جانبی کامپیوتر، که برای مثال در یک کامپیوتر 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 V نیز برای مدارهای قدرت است. گذرگاه D+ برای انتقال داده روی گذرگاه و گذرگاه D- برای دریافت داده است.
کابل اتوبوس با سرعت کامل یک کابل جفت پیچ خورده است که توسط یک محافظ محافظت می شود و همچنین می تواند برای عملکرد با سرعت کم استفاده شود. کابلی که فقط با حداقل سرعت کار می کند (مثلاً برای اتصال ماوس) می تواند بدون محافظ باشد.
کانکتورهای مورد استفاده برای اتصال دستگاه های جانبی به سری تقسیم می شوند: کانکتورهای سری "A" (شاخه و سوکت) فقط برای اتصال به یک منبع مانند کامپیوتر در نظر گرفته شده اند، کانکتورهای سری "B" (شاخه و سوکت) فقط برای اتصال هستند. به یک دستگاه جانبی

کانکتورهای USB دارای شماره پین ​​زیر هستند که در جدول 2.6.1 نشان داده شده است.

جدول 2.6.1 - هدف و علامت گذاری مخاطبین USB

در سال 1999، همان کنسرسیوم شرکت های کامپیوتری که توسعه اولین نسخه استاندارد اتوبوس USB را آغاز کردند، به طور فعال نسخه 2.0 USB را توسعه دادند که با معرفی حالت پرسرعت اضافی (سرعت بالا) متمایز شد. پهنای باند باس 40 برابر افزایش یافته است، تا 480 مگابیت بر ثانیه، که امکان انتقال داده های ویدئویی از طریق USB را فراهم می کند.
سازگاری تمام تجهیزات جانبی و کابل های پرسرعت که قبلا منتشر شده اند کاملاً حفظ می شود. کنترلر استاندارد 2.0 قبلاً در مجموعه منطقی سیستم از دستگاه های قابل برنامه ریزی ادغام شده است (به عنوان مثال، مادربردکامپیوتر شخصی).

در سال 2008 شرکت های اینتل، Microsoft، Hewlett-Packard، Texas Instruments، NEC و NXP Semiconductors مشخصات استاندارد USB 3.0 را ایجاد کردند. در مشخصات USB 3.0، کانکتورها و کابل های استاندارد به روز شده از نظر فیزیکی و عملکردی با USB 2.0 سازگاری دارند، اما علاوه بر چهار خط ارتباطی، چهار خط دیگر نیز اضافه شده است. با این حال، مخاطبین جدید در کانکتورهای USB 3.0 جدا از موارد قدیمی در یک ردیف تماس متفاوت قرار دارند. مشخصات USB 3.0 بهبود می یابد حداکثر سرعت، بیشینه سرعتانتقال اطلاعات تا 5 گیگابیت بر ثانیه - که مرتبه ای بزرگتر از 480 مگابیت بر ثانیه است که USB 2.0 می تواند ارائه دهد. علاوه بر این، حداکثر جریان از 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 قرار می گیرند. بر این اساس، سازماندهی منبع تغذیه با این عملکردهای USB به عنوان یک دستگاه HID منطقی ترین است.

در مثال در نظر گرفته شده، نرخ انتقال داده پایین برای عملکرد عادی کافی خواهد بود، در موارد دیگر، دستگاه ها می توانند در نرخ مبادله بسیار مطالبه کنند. سرعت انتقال پایین محدودیت اصلی گزینه طراحی دستگاه HID است که در مقایسه با سرعت کامل 12 مگابیت بر ثانیه گذرگاه USB 1.0، به نظر می رسد یک نقطه ضعف بزرگ فناوری HID در انتخاب یک پیاده سازی خاص USB باشد. با این حال، برای بسیاری از وظایف ارتباطی، سرعت مشخص شده کاملاً کافی است و معماری HID به عنوان یک ابزار تخصصی جایگاه شایسته خود را در بین روش های سازماندهی تبادل داده ها می گیرد.

دو نوع دستگاه HID وجود دارد: آنهایی که شرکت می کنند (بوت) و آنهایی که در بوت اولیه کامپیوتر شرکت نمی کنند. بارزترین نمونه دستگاه USB-HID قابل بوت، صفحه کلید است که با شروع به کار کامپیوتر شروع به کار می کند.

هنگام طراحی یک دستگاه HID، الزامات مشخصات زیر باید رعایت شود:

1. دستگاه HID با سرعت کامل می تواند 64000 بایت در هر ثانیه یا 64 بایت در هر 1 میلی ثانیه انتقال دهد. یک دستگاه HID با سرعت کم می تواند تا 800 بایت در ثانیه یا 8 بایت در هر 10 میلی ثانیه انتقال دهد.

2. دستگاه HID می تواند فرکانس نظرسنجی خود را برای تعیین اینکه آیا داده های تازه ای برای انتقال دارد یا خیر، برنامه ریزی کند.

3. تبادل داده با دستگاه HID از طریق ساختار خاصی به نام گزارش انجام می شود. هر گزارش تعریف شده می تواند تا 65535 بایت داده داشته باشد. ساختار گزارش دارای یک سازماندهی بسیار انعطاف پذیر است که به شما امکان می دهد هر قالب انتقال داده را توصیف کنید. برای اینکه یک فرمت گزارش خاص برای میزبان شناخته شود، میکروکنترلر باید حاوی توضیحات خاصی باشد - توصیفگر گزارش.

تعامل USB به چندین روش مستقیماً روی میکروکنترلر پیاده سازی می شود:

1. استفاده از یک کنترلر با پشتیبانی سخت افزاری، به عنوان مثال AT90USB*، از atmega.

2. با استفاده از شبیه سازی نرم افزار رابط USB بر روی هر میکروکنترلر.

برای پیاده سازی نرم افزار، در حال حاضر تعدادی راه حل آماده برای خانواده های مختلف میکروکنترلرها وجود دارد. برای میکروکنترلرهای AVRبه عنوان مثال، Atmega8 می توانید از کتابخانه های رایگان زیر در زبان C استفاده کنید:

استفاده از هر دو بسیار آسان است، شبیه‌سازی کامل دستگاه‌های کم‌سرعت USB 1.1، به استثنای رسیدگی به خطاهای ارتباطی و ویژگی‌های الکتریکی، و تقریباً روی همه کنترل‌کننده‌های AVR با حداقل 2 کیلوبایت حافظه فلش، 128 بایت رم و قابل اجرا هستند. فرکانس 12 تا 20 مگاهرتز

برای نوشتن برنامه هایی که پشتیبانی می کنند USB ویندوزدستگاه‌های HID به فایل‌های هدر hid* موجود در WDK (کیت درایور ویندوز) نیاز دارند، یا می‌توانید از کتابخانه مخفی موجود یا کتابخانه مشابه دیگر استفاده کنید.

بنابراین، به طور کلی، برنامه نویسی USB یک کار نسبتاً پیچیده است که به یک میکروکنترلر ویژه با پشتیبانی سخت افزاری و نوشتن درایور سیستم عامل نیاز دارد. با این حال، در عمل، هنگام توسعه دستگاه‌ها، می‌توانید از رابط بسیار ساده‌تری برای دستگاه‌های HID استفاده کنید که پشتیبانی از آن در سطح پیاده‌سازی می‌شود. راننده استانداردسیستم ها و برنامه نویسی با استفاده از کتابخانه های تابع موجود ساده شده است.

کنترل سوالات

  1. تفاوت بین سیم های D- و GND در USB چیست؟ چرا نمی توانید از یک سیم مشترک برای برق و سیگنال استفاده کنید؟
  2. چند حالت سرعت عملکرد USBامروز (از جمله نسخه 3.0) وجود دارد؟
  3. دستگاه HID چیست؟ چرا برای کار در سیستم عامل های مدرن به درایورهای نوشتن نیاز ندارند؟
  4. آیا می توان دستگاه های USB را با استفاده از ریزپردازنده ای که پشتیبانی داخلی داخلی ندارد، پیاده سازی کرد؟
  5. تفاوت اصلی USB 3.0 با نسخه های قبلی چیست؟

کتاب خوبیه، خیلی توضیح میده برای کسانی که می خواهند بفهمند چگونه داده ها از طریق گذرگاه USB منتقل می شود مفید خواهد بود.

مقدمه 1
این کتاب برای چه کسانی است: 2
آنچه در کتاب 2 خواهید یافت
نرم افزار مورد نیاز 3
الزامات سخت افزاری 4
درباره کد برنامه 4
شرح مختصری از فصل 4
نماد 6
با تشکر 7
بخش اول. معرفی USB 9
فصل 1. USB 11 چیست
1.1. تاریخچه USB 11
1.2. مقایسه USB با سایر رابط ها 14
1.3. مفاهیم USB 16
1.3.1. معماری عمومی اتوبوس 16
1.3.2. معماری فیزیکی و منطقی اتوبوس 16
1.3.3. اجزای USB 18
1.3.4. ویژگی های دستگاه USB 18
1.3.5. خواص هاب 19
1.3.6. خواص میزبان 20
1.4. 20 نمونه دستگاه USB
1.4.1. ماوس و صفحه کلید.، 21
1.4.2. مانیتور 21
1.4.3. آداپتورهای USB-to-COM و USB-to-LPT 22
1.4.4. اسکنر 23
1.4.5. مودم 23
1.4.6. بلندگو 24
1.4.7. درایوهای فلش 25
1.4.8. هاب 28
1.4.9. فن آوری اندازه گیری 28
1.4.10. وسایل عجیب و غریب 29
1.5. اتصال شبکهاز طریق USB 30
1.5.1. مبدل USB-Ethernet 31
1.5.2. اتصال مستقیم از طریق پورت USB 31
1.6. انتقال داده 31
1.6.1. اصول انتقال داده 32
1.6.2. مکانیسم وقفه 32
1.6.3. رابط های آداپتور میزبان 32
1.6.4. قابلیت DMA 34
1.6.5. حالت های انتقال داده 34
1.7. نصب و پیکربندی دستگاه های USB 35
1.7.1. تنظیمات بایوس برای USB 38
1.7.2. عیب یابی 41
1.8. محدودیت های USB 45
1.9. اگر کامپیوتر 46 بخرید
1.9.1. HS و USB 2.0 یکسان نیستند! 46
1.9.2. مادربرد 47
1.9.3. ساختمان 48
1.9.4. USB برای مدل های رایانه قدیمی 48
1.10. منابع آنلاین برای این فصل 49
فصل 2. سخت افزار USB 51
2.1. کابل ها و کانکتورها 51
2.1.1. انواع کابل 52
2.1.2. طول کابل 53
2.1.3. اتصال دهنده ها 53
2.2. رابط فیزیکی 55
2.2.1. کدگذاری داده 57
2.2.2. شناسایی دستگاه 58
2.3. تغذیه 59
2.3.1. انواع برق USB 59
2.3.2. مدیریت انرژی 60
2.3.3. ورود به حالت کم مصرف 61
2.4. منابع آنلاین برای این فصل 61
قسمت دوم. سازمان داخلی USB 63
فصل 3. سازماندهی داخلی اتوبوس 65
3.1. سطوح ارتباط منطقی 65
3.1.1. نرم افزار مشتری سطح 66
3.1.2. درایور سیستم USB سطح 67
3.1.3. لایه 68 کنترل کننده میزبان رابط
3.1.4. اتوبوس جانبی سطح 68
3.1.5. USB Logical Device Level 69
3.1.6. سطح عملکردی دستگاه USB 69
3.2. انتقال داده در 69 سطح
3.3. انواع انتقال داده 71
3.4. همگام سازی با انتقال هم زمان 73
3.5. پرسنل 77
3.6. نقاط پایانی 78
3.7. کانال 79
3.8. بسته های 81
3.8.1. قالب بسته های نشانگر IN، OUT، SETUP و PING 83
3.8.2. فرمت بسته SOF 83
3.8.3. قالب بسته داده 84
3.8.4. فرمت بسته قدردانی< 84
3.8.5. قالب بسته SPLIT * 84
3.9. چک جمع 85
3.9.1. الگوریتم محاسبه CRC 86
3.9.2. محاسبه نرم افزاری CRC 87
3.10. معاملات 90
3.10.1. انواع معاملات 91
3.10.2. تایید تراکنش و کنترل جریان 92
3.10.3. پروتکل های تراکنش 93
فصل 4. سازماندهی داخلی دستگاه 96
4.1. درخواست به دستگاه های USB 96
4.1.1. بسته پیکربندی 96
4.1.2. درخواست های استاندارد به دستگاه های 99
4.1.3. توصیفگرهای دستگاه 105
فصل 5. سازماندهی داخلی میزبان و هاب 123
5.1. هاب 123
5.1.1. تعامل کنترل کننده میزبان با هاب 126
5.1.2. توصیفگر هاب 127
5.1.3. درخواست هاب 129
5.1.4. درخواست CLEAR_HUB_FEATURE 130
5.1.5. CLEAR PORT_FEATURE 130 را درخواست کنید
5.1.6. درخواست GET_BUS_STA TE 131
5.1.7. GET_HUB_DESCRfPTOR 131 را درخواست کنید
5.1.8. درخواست GET_HUB_STATUS 131
5.1.9. GET_PORT_STA TUS 132 را درخواست کنید
5.1.10. SET_HUB_DESCRIPTOR 134 را درخواست کنید
5.1.11. درخواست SET_HUB_FEATURE 134
5.1.12. درخواست ویژگی پورت را تنظیم کنید. 134
5.2. همکاری دستگاه ها با در سرعت های مختلف 135
فصل 6. USB بدون کامپیوتر 137
6.1. کانکتورهای OTG 138
6.2. انواع دستگاه های OTG 138
6.3. توصیفگر دستگاه OTG 139
6.4. منابع آنلاین برای این فصل 140
بخش سوم. تمرین برنامه نویسی 141
فصل 7. پشتیبانی از USBدر ویندوز 143
7.1. مدل WDM 144
7.2. تعامل با درایور USB 146
فصل 8. دستگاه های HID * 149
8.1. ویژگی های دستگاه HID 149
8.2. نحوه برقراری ارتباط با دستگاه HID 151
8.3. نصب دستگاه HID 152
8.4. شناسایی دستگاه HID 152
8.4.1. شناسایی دستگاه بوت 153
8.4.2. توصیفگر پیکربندی دستگاه HID 153
8.4.3. توصیفگر HID 154
8.4.4. شرح گزارش 156
8.5. ساختار توصیفگر گزارش 156
8.5.1. ساختار عناصر گزارش 156
8.5.2. انواع عناصر گزارش 157
8.5.3. نمونه هایی از توصیفگرها 165
8.6. پرس و جوهای دستگاه HID 168
8.6.1. درخواست GET_REPORT. 169
8.6.2. درخواست SET_REPORT 169
8.6.3. درخواست GETJDLE. 170
8.6.4. SETJDLE 170 را پرس و جو کنید
8.6.5. GET_PROTOCOL 171 را درخواست کنید
8.6.6. SET_PROTOCOL 171 را درخواست کنید
8.7. ابزار 171
8.8. تعامل با درایور HID 172
فصل 9. مقدمه ای بر WDM 181
9.1. لایه های درایور 183
9.2. نام دستگاه های نمادین 184
9.3. WDM Driver Basic Procedures 189
9.3.1. Procedure DriverEntry 190
9.3.2. رویه AddDevice 192
9.3.3. رویه تخلیه 194
9.3.4. رویه های عملیاتی راننده 196
9.3.5. ارائه درخواست های IOCTL 203
9.4. بارگیری درایور و دسترسی به رویه های راننده 209
9.4.1. مراحل کار با درایور 209
9.4.2. ثبت نام راننده 210
9.4.3. با مراجعه به رویه های عملیاتی 217
9.4.4. ذخیره درایور در فایل اجرایی 218
9.5. ابزار ایجاد درایور 220
9.5.1. NuMega Driver Studio 220
9.5.2. Jungo WinDriver 220
9.5.3. Jungo Kernel Driver 220
فصل 10. مشخصات USB PnP 221
10.1. مقدمه ای بر Plug and Play 221
10.1.1. وظایف و توابع Plug and Play 221
10.1.2. اجرای رویه PnP 222
10.1.3. اجزای نرم افزاری PnP 224
10.2. برای USB 225 وصل و پخش کنید
10.2.1. پیکربندی دستگاه های USB 226
10.2.2. دستگاه USB شماره 226
10.2.3. شناسه های دستگاه PnP USB 228
10.3. دریافت لیستی از دستگاه های USB 229
10.4. فایل INF 234
10.4.1. ساختار فایل INF 234
10.4.2. بخش نسخه 235
10.4.3. سازنده بخش 237
10.4.4. بخش DestinationDirs 239
10.4.5. شرح مدل بخش 241
10.4.6. بخش xxx.AddReg و xxx.DelReg. 242
10.4.7. بخش xxx.LogConfig 244
10.4.8. بخش xxx.CopyFiles 244
10.4.9. بخش رشته های 245
10.4.10. اتصالات بخش 246
10.4.11. ایجاد و آزمایش فایل های INF 247
10.4.12. نصب دستگاه ها با استفاده از فایل INF 248
10.5. شاخه های رجیستری برای USB 249
فصل 11. ویژگی های BIOS 251
11.1. سرویس BIOS 1AN 251
11.1.1. عملکرد B101H - تعیین وجود PCI BIOS 252
11.1.2. عملکرد В102Н - دستگاه PCI را با شناسه ها جستجو کنید
دستگاه و سازنده 253
11.1.3. عملکرد В103Н - دستگاه PCI را با کد کلاس 254 جستجو کنید
11.1.4. تابع B108N - خواندن ثبت پیکربندی (بایت) 255
11.1.5. تابع VYu9N - خواندن ثبت پیکربندی (Word) 256
11.1.6. تابع B10AN - خواندن ثبت پیکربندی (DWord) 256
11.1.7. تابع В10ВН - ثبت پیکربندی نوشتن (بایت) 257
11.1.8. تابع B10CH - نوشتن یک ثبات پیکربندی (Word) 257
11.1.9. تابع B10DH - Configuration Register Write (DWord) 258
11.2. مثال استفاده 259
بخش چهارم. ایجاد دستگاه های USB 283
فصل 12. لوازم جانبی USB 285
12.1. تراشه های Atmel 286
12.1.1. میکروکنترلرها با معماری MSC-51 286
12.1.2. کنترلرهای هاب 289
12.1.3. ریزپردازنده هاب با هسته AVR 289
12.1.4. سایر تراشه های Atmel 290
12.2. تراشه های Cygnal 291
12.2.1. ریزپردازنده های C8051F320 و C8051F321 291
12.2.2. سایر تراشه های Cygnal 293
12.3. تراشه های FTDI 296
12.3.1. تراشه های FT232AM و FT232BM 297
12.3.2. تراشه های FT245AM و FT245BM 298
12.3.3. تراشه FT2232BM 299
12.3.4. تراشه FT8U100AX 300
12.3.5. کیت های اشکال زدایی و ماژول های 301
12.3.6. درایورهای 302
12.3.7. ابزارهای کمکی اضافی 303
12.3.8. 304 ماژول دیگر
12.4. تراشه های 304 اینتل
12.5. تراشه های میکروچیپ 308
12.6. تراشه های موتورولا 308
12.7. تراشه های فیلیپس 309
12.7.1. تراشه های USB 310
12.7.2. هاب 311
12.7.3. سایر تراشه های فیلیپس 313
12.8. تراشه های Texas Instruments 314
12.9. تراشه های Trans Dimension 317
12.10. 318 تراشه حفاظت از قدرت
12.11. منابع آنلاین برای این فصل 319
فصل 13. دستگاه HID مبتنی بر Atmel AT89C5131 322
13.1. بلوک دیاگرام AT89S5131 322
13.2. USB AT89С5131 324 را ثبت می کند
13.2.1. USBCON Register 324
13.2.2. USBADDR Register 326
13.2.3. USBINT Register 327
13.2.4. رجیستر USBIEN 328
13.2.5. ثبت نام UEPNUM 329
13.2.6. UEPCONX 330 را ثبت کنید
13.2.7. ثبت نام UEPSTAX 331
13.2.8. ثبت نام UEPRST. 334
13.2.9. ثبت نام UEPINT. 335
13.2.10. ثبت نام UEPIEN 336
13.2.11. UEPDATX 337 را ثبت کنید
13.2.12. UBYCTLX 337 را ثبت کنید
13.2.13. UFNUML Register 338
13.2.14. ثبت نام UFNUMH 338
13.3. مدار AT89S5131 338
13.4. ابزارهای برنامه نویسی 339
13.4.1. کامپایلر 341
13.4.2. برنامه نویس 342
13.5. برنامه برای ریزپردازنده 349
13.5.1. نسخه اول برنامه برای AT89S5131 349
13.5.2. افزودن توصیفگرهای رشته 369
13.5.3. افزودن نقاط پایانی 374
13.5.4. ایجاد یک دستگاه HID 377
13.5.5. ارتباط با دستگاه HID 381
13.6. خواندن گزارش ها در ویندوز 388
13.7. ویژگی های اضافی ویندوز XP 396
13.8. دستگاه با چندین گزارش 397
فصل 14. ایجاد یک دستگاه USB بر اساس ATMEL AT89C5131 402
14.1. دستگاه غیر HID 402
14.2. ایجاد درایور با استفاده از Driver Studio 405
14.2.1. چند کلمه در مورد کتابخانه Driver Studio 407
14.2.2. سایر کلاس های Driver Studio 411
14.2.3. ایجاد یک قالب درایور با استفاده از Driver Studio 412
14.2.4. بهبود قالب درایور 422
14.2.5. روش های پایه کلاس دستگاه 423
14.2.6. پیاده سازی داده های خواندن 426
14.2.7. نصب درایور 428
14.2.8. دیتا ریدر 429
14.2.9. خواندن داده ها از انواع دیگر نقاط پایانی 438
14.2.10. درایور USB "Clean" 439
فصل 15: استفاده از تراشه های FTDI 457
15.1. نمودار عملکردی FT232BM 457
15.2. طراحی مدار FT232BM 460
15.3. توابع D2XX 460
15.4. انتقال از COM به USB 465
15.4.1. توضیحات مدار مبدل 465
15.4.2. تنظیم نرخ باود 467
قسمت پنجم. راهنما 469
فصل 16: ویژگی های اساسی ویندوز 471
16.1. توابع CreateFile و CloseHandle: باز کردن و بستن یک شی.471
16.1.1. اطلاعات تکمیلی 472
16.1.2. مقدار برگشتی 472
16.1.3. به عنوان مثال با شماره 472 تماس بگیرید
16.2. تابع خواندن فایل: خواندن اطلاعات 473
16.2.1. اطلاعات تکمیلی 474
16.2.2. مقدار برگشتی 474
16.2.3. به عنوان مثال با شماره 474 تماس بگیرید
16.3. تابع WriteFile: انتقال داده 475
16.3.1. اطلاعات تکمیلی 476
16.3.2. مقدار برگشتی 476
16.3.3. به عنوان مثال با شماره 476 تماس بگیرید
16.4. تابع ReadFileEx. خواندن داده های APC 477
16.4.1. مقدار برگشتی 479
16.4.2. اطلاعات تکمیلی 479
16.4.3. به عنوان مثال با شماره 479 تماس بگیرید
16.5. تابع WriteFileEx: انتقال داده APC 480
16.5.1. مقدار برگشتی 481
16.5.2. به عنوان مثال با شماره 481 تماس بگیرید
16.6. تابع WaitForSingleObject در انتظار سیگنال
وضعیت شی 482
16.6.1. مقدار برگشتی 482
16.7. تابع WaitForMultipleObjects: در انتظار سیگنال
وضعیت شی 483
16.7.1. مقدار برگشتی 484
16.8. تابع GetOverlappedResult نتیجه عملکرد ناهمزمان 484
16.8.1. مقدار برگشتی 485
16.9. عملکرد DeviceIoControl: کنترل مستقیم درایور 485
16.9.1. مقدار برگشتی 487
16.10. عملکرد QueryDosDevice: دریافت نام دستگاه
با نام DOS خود 487
16.10.1. مقدار برگشتی 488
16.10.2. به عنوان مثال با شماره 488 تماس بگیرید
16.11: تعریف عملکرد دستگاه Dos: عملیات با نام دستگاه DOS 489
16.11.1. مقدار برگشتی 490
16.11.2. به عنوان مثال با شماره 490 تماس بگیرید
فصل 17. توابع HID API. 492
17.1. تابع HidD_Hello: بررسی کتابخانه 492
17.2. تابع HidD_GetHidGuid: دریافت GUID 492
17.3. تابع HidD_GetPreparsedData: ایجاد یک توصیفگر دستگاه 493
17.4. عملکرد HidD_FreePreparsedData: آزاد کردن دسته دستگاه 493
17.5. تابع HidD_GetFeature: دریافت گزارش FEATURE 494
17.6. تابع HidD_SetFeature: ارسال گزارش FEATURE 494
17.7. تابع HidD_GetNumInputBuffers: دریافت تعداد بافرهای 495
17.8. تابع HidD_SetNumInputBuffers: تنظیم تعداد بافرها به 495
17.9. تابع HidD_GetAttribntes: دریافت ویژگی های دستگاه 495
17.10. تابع HidD_GetMimifactnrerStnng. دریافت رشته سازنده 496
17.11. تابع HidD_GetProductString. دریافت خط تولید 497
17.12. تابع HidD_ دریافت سریال MumberString. گرفتن رشته
شماره سریال 497
17.13. تابع HidD_GetIndexedString. گرفتن یک ردیف در شاخص 498
17.14. تابع HidDjGetlnputReporr. دریافت گزارش INPUT 498
17.15. تابع HidD_SetOutputReport. ارسال گزارش OUTPUT 499
17.16. عملکرد HidP_GetCaps: دریافت ویژگی های دستگاه 499
17.17. تابع HidP_MaxDataListLength: دریافت اندازه گزارش 500
فصل 18. کنترل کننده میزبان UCH 502
18.1. Host Controller Control Registers 502
18.1.1. USB Command Register (USBCMD) ..504
18.1.2. ثبت وضعیت USB (USBSTS) 506
18.1.3. ثبت کنترل وقفه (USBINTR) 506
18.1.4. ثبت شماره قاب (FRNUM) 507
18.1.5. ثبت آدرس پایگاه فریم (FLBASEADD) 508
18.1.6. شروع ثبت اصلاح کننده فریم (SOFMOD) 508
18.1.7. ثبت وضعیت و کنترل بندر (PORTSC) 509
18.2. ساختارهای داده کنترل کننده میزبان UCH 510
18.2.1. لیست فریم های 510
18.2.2. توصیفگر انتقال i 511
18.2.3. هدر صف 514
18.3. در حال پردازش لیستی از توصیفگرهای UCH 516
فصل 19. ابزار 518
19.1. Microsoft Visual Studio Tools 518
19.1.1. بستگی به 518 دارد
19.1.2. جستجوی خطا 518
19.1.3. GuidGen 518
19.2. ابزارهای Microsoft DDK 520
19.2.1. DeviceTree 520
19.2.2. DevCon.-521
19.2.3. چکلنف و جنلنف. 526
19.3. CompuWare Corporation Tools 527
19.3.1. مانیتور 527
19.3.2. SymLink 527
19.3.3. EzDriverlnstaller 527
19.3.4. WdmSniff 527
19.4. به معنای Syslntemals 528 است
19.4.1. Winobj 528
19.5. USB Tools Forum 531
19.5.1. ابزار توصیفگر HID 531
19.6. نرم افزار HDD 533
19.7. Sourceforge Tools 533
برنامه های کاربردی 535
پیوست 1. توابع اضافی 537
پیوست 2. جدول شناسه های زبان (LangID) 539
پیوست 3. جدول کدهای سازنده (شناسه فروشنده، شناسه دستگاه) 543
پیوست 4. شرح سی دی 546
ادبیات 548
نمایه موضوعی 549

اشتراک گذاری