USB ინტერფეისი: ინტერფეისის მოწყობილობების აღწერა და საფუძვლები. USB ავტობუსის პროტოკოლი USB 2.0 პროტოკოლი

10.09.2021
  • Mini-B კონექტორი ECN: ცნობა გამოქვეყნებულია 2000 წლის ოქტომბერში.
  • ერატა, 2000 წლის დეკემბრიდან: ცნობა გამოქვეყნებულია 2000 წლის დეკემბერში.
  • აწევა/ჩამოწევა რეზისტორები ECN
  • Errata, 2002 წლის მაისიდან: ცნობა გამოქვეყნებულია 2002 წლის მაისში.
  • ინტერფეისის ასოციაციები ECN: ცნობა გამოქვეყნებულია 2003 წლის მაისში.
    • დაემატა ახალი სტანდარტები, რათა მრავალი ინტერფეისი იყოს დაკავშირებული მოწყობილობის ერთ ფუნქციასთან.
  • მომრგვალებული Chamfer ECN: ცნობა გამოქვეყნებულია 2003 წლის ოქტომბერში.
  • Unicode ECN: ცნობა გამოქვეყნებულია 2005 წლის თებერვალში.
    • ეს ECN განსაზღვრავს, რომ სტრიქონები დაშიფრულია UTF-16LE გამოყენებით.
  • ჩიპთაშორისი USB დანამატი: ცნობა გამოქვეყნებულია 2006 წლის მარტში.
  • On-the-Go დანამატი 1.3: ცნობა გამოქვეყნებულია 2006 წლის დეკემბერში.
    • USB On-The-Go შესაძლებელს ხდის ორ USB მოწყობილობას დაუკავშირდეს ერთმანეთს ცალკე USB ჰოსტის გარეშე. პრაქტიკაში, ერთ-ერთი მოწყობილობა მეორის მასპინძლის როლს ასრულებს.

USB OTG

USB 3.0

USB 3.0 განვითარების ბოლო ეტაპზეა. შემდეგი კომპანიები ამუშავებენ USB 3.0: Microsoft, Texas Instruments, NXP Semiconductors. IN USB სპეციფიკაციებიგანახლებული სტანდარტის 3.0 კონექტორები და კაბელები ფიზიკურად და ფუნქციურად თავსებადია USB 2.0-თან. USB კაბელი 2.0 შეიცავს ოთხ ხაზს - წყვილს მონაცემების მიღების/გადაცემისთვის, ერთი დენის და კიდევ ერთი დასამიწებლად. გარდა ამისა, USB 3.0 ამატებს ხუთ ახალ ხაზს (რის შედეგადაც ხდება გაცილებით სქელი კაბელი), მაგრამ ახალი ქინძისთავები განლაგებულია ძველების პარალელურად, სხვა პინთა მწკრივზე. ახლა თქვენ შეგიძლიათ მარტივად განსაზღვროთ, ეკუთვნის თუ არა კაბელი სტანდარტის ამა თუ იმ ვერსიას, უბრალოდ მისი კონექტორის დათვალიერებით. USB 3.0 სპეციფიკაცია გაუმჯობესებულია მაქსიმალური სიჩქარეინფორმაციის გადაცემა 4.8 გბიტ/წმ-მდე - რაც არის 480 მბიტ/წმზე მეტი, რაც USB 2.0-ს შეუძლია. USB 3.0 ამაყობს არა მხოლოდ მონაცემთა გადაცემის უფრო მაღალი სიჩქარით, არამედ გაზრდილი დენი 500 mA-დან 900 mA-მდე. ამიერიდან მომხმარებელი არა მხოლოდ ერთი ჰაბიდან შეძლებს ბევრად უფრო დიდი რაოდენობის მოწყობილობების კვებას, არამედ თავად აპარატურა, რომელიც ადრე ცალკე კვების წყაროებით იყო მომარაგებული, მოიშორებს მათ.


აქ GND არის "საქმის" წრე პერიფერიული მოწყობილობების კვებისათვის, VBus არის +5 V, ასევე დენის სქემებისთვის. მონაცემები დიფერენციალურად გადაიცემა D+ და D− მავთულის საშუალებით (მდგომარეობები 0 და 1 (ოფიციალური დოკუმენტაციის ტერმინოლოგიაში, შესაბამისად, diff0 და diff1) განისაზღვრება 0,2 ვ-ზე მეტი ხაზების პოტენციური სხვაობით და იმ პირობით, რომ ერთ-ერთზე. ხაზები (D− diff0 და D+-ის შემთხვევაში diff1-ზე) პოტენციალი GND-თან შედარებით უფრო მაღალია, ვიდრე 2,8 ვ. დიფერენციალური გადაცემის მეთოდი არის მთავარი, მაგრამ არა ერთადერთი (მაგალითად, ინიციალიზაციის დროს, მოწყობილობა აცნობებს ჰოსტინგი მოწყობილობის მიერ მხარდაჭერილი რეჟიმის შესახებ (სრული სიჩქარით ან დაბალი სიჩქარით) ერთ-ერთი ხაზის მონაცემების V_BUS-ში აყვანით 1,5 kOhm რეზისტორის მეშვეობით (D− დაბალი სიჩქარის რეჟიმისთვის და D+ სრული სიჩქარისთვის. რეჟიმში, მოწყობილობები, რომლებიც მუშაობენ მაღალსიჩქარიან რეჟიმში, იქცევიან ისე, როგორც მოწყობილობები სრული სიჩქარით, ასევე ზოგჯერ გარშემო მყოფი მავთულები აქვს ბოჭკოვანი ლიკვიდაცია, რათა დაიცვას ისინი ფიზიკური დაზიანებისგან.

USB 3.0 ტიპის B კონექტორი

USB 3.0 ტიპის A კონექტორი

USB 3.0 კაბელები და კონექტორები

USB-ის ნაკლოვანებები

მიუხედავად იმისა, რომ USB 2.0-ის მაქსიმალური გამტარობა არის 480 Mbps (60 MB/s), პრაქტიკაში ამის მიღწევა შესაძლებელია გამტარუნარიანობა, მწვერვალთან ახლოს, იშლება. ეს გამოწვეულია საკმაოდ დიდი შეფერხებით USB ავტობუსიმონაცემთა გადაცემის მოთხოვნასა და გადაცემის რეალურ დაწყებას შორის. მაგალითად, FireWire ავტობუსი, მიუხედავად იმისა, რომ მას აქვს უფრო დაბალი პიკური გამტარუნარიანობა 400 Mbps, რაც 80 Mbps-ით ნაკლებია USB 2.0-ზე, რეალურად იძლევა უფრო დიდი გამტარუნარიანობის საშუალებას მონაცემთა გაცვლისთვის. მყარი დისკებიდა ინფორმაციის შესანახი სხვა მოწყობილობები.

USB და FireWire/1394

USB შენახვის პროტოკოლი, რომელიც არის ბრძანებების გადაცემის მეთოდი

გარდა ამისა, USB მეხსიერება არ იყო მხარდაჭერილი ძველ ოპერაციულ სისტემებში (ორიგინალური Windows 98) და საჭიროებდა დრაივერის ინსტალაციას. მათში ასევე მხარდაჭერილი იყო SBP-2. ასევე, ძველ ოპერაციულ სისტემებში (Windows 2000), USB შენახვის პროტოკოლი განხორციელდა შეკვეცილი ფორმით, რომელიც არ იძლეოდა CD/DVD ჩაწერის ფუნქციის გამოყენებას დაკავშირებულ USB დისკზე არასოდეს ყოფილა ასეთი შეზღუდვები.

USB ავტობუსი მკაცრად არის ორიენტირებული, ამიტომ 2 კომპიუტერის ან 2 პერიფერიული მოწყობილობის დასაკავშირებლად საჭიროა დამატებითი აღჭურვილობა. ზოგიერთი მწარმოებელი მხარს უჭერს პრინტერისა და სკანერის, ან კამერისა და პრინტერის დაკავშირებას, მაგრამ ეს დანერგვები ძალიან სპეციფიკურია მწარმოებლისათვის და არ არის სტანდარტიზებული. 1394/FireWire ავტობუსი ამ ნაკლოვანებას არ ექვემდებარება (შეგიძლიათ დააკავშიროთ 2 ვიდეო კამერა).

თუმცა, Apple-ის სალიცენზიო პოლიტიკის გამო, ისევე როგორც აპარატურის გაცილებით მაღალი სირთულის გამო, 1394 ნაკლებად გავრცელებულია. დედაპლატებიძველ კომპიუტერებს არ აქვთ 1394 კონტროლერი. რაც შეეხება პერიფერიულ მოწყობილობებს, 1394 მხარდაჭერა, როგორც წესი, ვერაფერში გვხვდება, გარდა ვიდეოკამერებისა და კამერის კორპუსებისა. გარე მძიმედისკები და CD/DVD დისკები.

აგრეთვე იხილეთ

  • FireWire
  • ტრანსფერჯეტი

წყაროები

ბმულები

  • USB სიახლეები (გერმანული)

მაღალი სიჩქარის სიგნალიზაციის ბიტის სიხშირე - 12 მბ/წმ - კაბელის მაქსიმალური სიგრძე მაღალი სიჩქარის სიგნალის ბიტის სიჩქარისთვის - 5 მ - დაბალი სიჩქარის სიგნალის ბიტის სიხშირე - 1,5 მბ/წმ - კაბელის მაქსიმალური სიგრძე დაბალი სიჩქარის სიგნალის ბიტის სიხშირეზე - 3 მ - მაქსიმალური დაკავშირებული მოწყობილობები (მათ შორის მულტიპლიკატორები) - 127 - შესაძლებელია მოწყობილობების დაკავშირება სხვადასხვა ბაუდის სიჩქარით - მომხმარებლისთვის საჭირო არ არის დამატებითი ელემენტების დაყენება, როგორიცაა ტერმინატორები SCSI-სთვის - მიწოდების ძაბვა პერიფერიული მოწყობილობებისთვის - 5 V - მაქსიმალური დენის მოხმარება თითო მოწყობილობაზე - 500 mA

USB 1.1 და 2.0 კონექტორების გაყვანილობა

USB სიგნალები გადაიცემა დაცულ ოთხსადენიანი კაბელის ორ მავთულზე.

აქ :

GND- "ქეისის" წრე პერიფერიული მოწყობილობების კვებისათვის V ავტობუსი- +5V ასევე ელექტრომომარაგების სქემებისთვის ავტობუსი D+განკუთვნილია მონაცემთა გადაცემისთვის

საბურავი D-მონაცემების მისაღებად.

USB 2.0-ის ნაკლოვანებები

მიუხედავად იმისა, რომ USB 2.0-ის მონაცემთა გადაცემის მაქსიმალური სიჩქარეა 480 Mbps (60 MB/s), რეალურ ცხოვრებაში არარეალურია ასეთი სიჩქარის მიღწევა (~33.5 MB/s პრაქტიკაში). ეს გამოწვეულია USB ავტობუსზე დიდი შეფერხებით მონაცემთა გადაცემის მოთხოვნასა და გადაცემის რეალურ დაწყებას შორის. მაგალითად, FireWire ავტობუსი, მიუხედავად იმისა, რომ მას აქვს უფრო დაბალი გამტარუნარიანობა 400 Mbps, რაც 80 Mbps (10 MB/s) ნაკლებია, ვიდრე USB 2.0, რეალურად იძლევა უფრო დიდი გამტარუნარიანობის გაცვლას მყარ დისკებთან და ინფორმაციის სხვა მოწყობილობებთან მოწყობილობები. ამასთან დაკავშირებით, სხვადასხვა მობილური დისკები დიდი ხანია შეზღუდულია USB 2.0-ის არასაკმარისი პრაქტიკული გამტარობით.

USB 3.0-ის ყველაზე მნიშვნელოვანი უპირატესობა არის მისი მაღალი სიჩქარე (5 გბ/წმ-მდე), რაც 10-ჯერ უფრო სწრაფია ვიდრე ძველი პორტი. ახალმა ინტერფეისმა გააუმჯობესა ენერგიის დაზოგვა. ეს საშუალებას აძლევს დისკს გადავიდეს ძილის რეჟიმში, როდესაც არ არის გამოყენებული. შესაძლებელია მონაცემთა ორმხრივი გადაცემა ერთდროულად. ეს უფრო მეტს მისცემს მაღალი სიჩქარე, თუ რამდენიმე მოწყობილობას აკავშირებთ ერთ პორტთან (გაყავით პორტი). შეგიძლიათ განშტოება ჰაბის გამოყენებით (ჰაბი არის მოწყობილობა, რომელიც ერთი პორტიდან განშტოდება 3-6 პორტად). ახლა, თუ თქვენ დააკავშირებთ ჰაბს USB 3.0 პორტს და დააკავშირებთ რამდენიმე მოწყობილობას (მაგალითად, ფლეშ დრაივს) ჰაბს და განახორციელებთ მონაცემთა ერთდროულ გადაცემას, დაინახავთ, რომ სიჩქარე გაცილებით მაღალი იქნება, ვიდრე USB-ზე იყო. 2.0 ინტერფეისი. არის მახასიათებელი, რომელიც შეიძლება იყოს პლუსი და მინუსი. USB 3.0 ინტერფეისმა გაზარდა დენი 900 mA-მდე, ხოლო USB 2.0 მუშაობს 500 mA დენით. ეს იქნება პლიუსი იმ მოწყობილობებისთვის, რომლებიც ადაპტირებულია USB 3.0-ზე, მაგრამ მცირე მინუსი არის ის, რომ შეიძლება იყოს რისკი უფრო სუსტი მოწყობილობების დატენვისას, როგორიცაა ტელეფონი. ახალი ინტერფეისის ფიზიკური მინუსი არის კაბელის ზომა. მაღალი სიჩქარის შესანარჩუნებლად, კაბელი გახდა უფრო სქელი და მოკლე სიგრძით (არ შეიძლება იყოს 3 მეტრზე მეტი), ვიდრე USB 2.0. მნიშვნელოვანია აღინიშნოს, რომ მოწყობილობები განსხვავებული USB ინტერფეისით იქნება მუშაობაკარგია და არ უნდა იყოს პრობლემა. მაგრამ არ იფიქროთ, რომ სიჩქარე გაიზრდება, თუ USB 3.0-ს დააკავშირებთ ძველ პორტს, ან დააკავშირებთ ძველ ინტერფეისის კაბელს ახალ პორტს. მონაცემთა გადაცემის სიჩქარე უტოლდება ყველაზე სუსტი პორტის სიჩქარეს.

  • სახელმძღვანელო

OSI ქსელის მოდელის ილუსტრირებული პროექცია უნივერსალურ სერიულ ავტობუსზე.

USB სტეკის სამი "აღსანიშნავი" დონე

მე არ ვიყავი კმაყოფილი USB სტეკის გარეგნობით, რომელიც ყველაზე ხშირად შეგიძლიათ იპოვოთ ინტერნეტში:

არც თუ ისე სასარგებლო USB დასტა


ავტობუსის დონე, ლოგიკური, ფუნქციონალური... ეს, რა თქმა უნდა, მშვენიერი აბსტრაქციებია, მაგრამ უფრო სავარაუდოა მათთვის, ვინც აპირებს დრაივერის ან აპლიკაციის პროგრამული უზრუნველყოფის შექმნას მასპინძლისთვის. მიკროკონტროლერის მხრივ, მე ველოდები შაბლონის სასრული მდგომარეობის მანქანას, რომლის კვანძებში ჩვენ ჩვეულებრივ ჩავრთავთ ჩვენს სასარგებლო კოდს და თავიდან ის, ჟანრის ყველა კანონის მიხედვით, ჩავარდება. ან პროგრამული უზრუნველყოფა მასპინძელზე იქნება მბზინავი. ან მძღოლი. ნებისმიერ შემთხვევაში, ვინმე მარცხდება. ასევე შეუძლებელია MK ბიბლიოთეკების დაუყოვნებლივ გარკვევა. ასე რომ, ანალიზატორით ვუყურებ USB ავტობუსში მოძრაობას, სადაც უცნობ ენაზე მიმდინარე მოვლენები, სამი შესანიშნავი დონე, საერთოდ არ ჯდება. მაინტერესებს გრიპის სიცხის გამო ასეთი დისონანსი მაქვს თავში?

თუ მკითხველს ჰქონდა მსგავსი გრძნობები, მე ვთავაზობ USB დატის ალტერნატიულ ხედვას, რომელიც მოულოდნელად გამიჩნდა ჩემს გადახურებულ ტვინში, საყვარელი 7-ფენიანი OSI მოდელის საფუძველზე. მე შემოვიფარგლე ხუთ დონეზე:

არ მინდა ვთქვა, რომ ყველა პროგრამული უზრუნველყოფა და ბიბლიოთეკა უკვე შექმნილია ან უნდა იყოს შექმნილი ამ მოდელის საფუძველზე. საინჟინრო მიზეზების გამო, დონეებთან კოდი მნიშვნელოვნად შერეული იქნება. მაგრამ მე მსურს დავეხმარო მათ, ვინც იწყებს USB ავტობუსის გაცნობას, ვისაც სურს გაიგოს მოწყობილობების გაცვლის პროტოკოლები და საგნობრივი სფეროს ტერმინოლოგია, დაუახლოვდეს მზა მაგალითები, ბიბლიოთეკები და უკეთესი ნავიგაცია მათში. ეს მოდელი არ არის MK-ში ჩასატვირთად, არამედ თქვენს ბრწყინვალე გონებაში, ძვირფასო მეგობრებო. და მერე შენი ოქროს ხელები თვითონ გააკეთებს ყველაფერს, ეჭვი არ მეპარება :)

მაშ, წავიდეთ, შეასწორეთ თუ შეცდომებს ხედავთ. ეს არის დრაფტი ვერსია და თუ მსგავსი რამ უკვე დახატულია სადმე, მაპატიეთ, ვერ ვიპოვე და მე თვითონ გავაკეთე. ვფიქრობ, სურათი არ გაიქცევა, მაგრამ ჯერ-ჯერობით პატივცემულ საზოგადოებას ავუხსნი, რატომ დავიწყე ეს გამოცემა თავიდან.

მორიგი ფლეშბეკი ოთხმოცდაათიანი წლებიდან

ჩემი პირველი შეცდომა სხვისი კოდიდან ოთხმოცდაათიანი წლების ბოლოს ამოვშალე, როცა სტუდენტობაში ვმუშაობდი. ეს იყო pppd FreeBSD-სთვის, რომელიც შემდეგ დავაინსტალირეთ მოდემის აუზზე. Motorola-ს მოდემები გათიშული იყო, ვერავინ გადიოდა, ხაზი უშედეგოდ დაიკარგა და PPP-ის საშუალებით დარჩენილი ერთადერთი გზა რატომღაც ბაგი იყო. სწორედ მაშინ გავარკვიე, რომ რატომღაც pppd ელოდა ექვს LCP საპასუხო ბაიტს საჭირო ოთხის ნაცვლად. მაშინ თავს ისე გიჟდ ვგრძნობდი შეცდომების შემძვრელიოთხმოცდაათიანი წლებიდან :-) რა შუაშია PPP? ეს უბრალოდ USB-ის მსგავსია: პაკეტი და წერტილი-წერტილი. მართალია, USB 2.0-ისგან განსხვავებით, ის სრული დუპლექსია.


მოგვწონს თუ არა, მიკროკონტროლერების ევოლუცია აშკარად არ გაჩერდება. არა, არა და ის გამოჩნდება პუბლიკაციებში (http://habrahabr.ru/post/208026/, http://habrahabr.ru/post/233391/) "მძიმე პერიფერიული მოწყობილობები" - USB ავტობუსის დანერგვა, რომელიც ჩაშენებულია MK-ში, ანალიზის მაგალითებით, HID-ის გამოყენებით და ა.შ. პატივი უნდა მივაგოთ ავტორს რაჯას: მოყვანილი რვა მაგალითიდან სტანდარტული ბიბლიოთეკა STSW-STM32121 (UM0424) და რატომღაც, მან აირჩია ყველაზე სასარგებლო (Custom HID), გადაიტანეს იგი უფასო Em::Blocks გარემოში, რომელიც გამოკვეთილია მკაფიო ენაზე, ცოტათი გაალამაზე, ბრავო! ამან ბევრი დრო დამიზოგა.

როგორ მივიდეთ ბიბლიოთეკაში?

ავტორის მიერ GitHub-ზე გამოქვეყნებული RHIDDemo პროექტი Em::Blocks-ისთვის, დავიწყე მისი პორტირება Keil-ში (ჩემი FTDI-ზე დაფუძნებული CoLink გამართვა; ვინმემ მითხარით Coocox მოდული Em::Blocks-ისთვის). მაგრამ უბრალოდ ვერ გავიგე: საიდან მიიღო ავტორმა SPL 3.6.1 2012 წლიდან, თუ საიტმა 2011 წლის 3.5.0 გამოაქვეყნა? მე გავიარე საკმაოდ მოსაწყენი ქვესტი, რომელმაც ჩემდა გასაკვირად მიიყვანა... პირდაპირ მზა Custom HID პროექტზე Keil-ისთვის, როგორც USB FS 4.0.0 ბიბლიოთეკის ნაწილი. თვალწინ დევს, როგორც თაგვი ცოცხის ქვეშ. ოჰ კარგად. მაგრამ ბოლოს მივუახლოვდი STMicroelectronics-ის გამოშვებებს, ვიპოვე STSW-STM32121 (UM0424) USB FS ბიბლიოთეკის აღწერა და შევაჩერე დეველოპერების მცდელობები, გამაგიჟებინა. მითხარი, ნორმალურია თუ არა ვინტაჟური CMSIS 1.30 2009 წლის SPL 3.5.0 კომპლექტში 2011 წლიდან, ახალი SPL 3.6.1 2012 წლის USB-FS 4.0.0-ში 2013 წლის (CMSIS 3.0.1 201-დან 3.0.1-ში ჩასმა. იქაც), მიუხედავად იმისა, რომ გამოაქვეყნეს მიმდინარე ვერსია CMSIS 3.30 გამოშვება 2014? სხვათა შორის, SPL 3.6.x-ში STM32F10X-ისთვის, დაფიქსირდა USART-ის რამდენიმე შეცდომა, რომელიც დაკავშირებულია ბუფერული გადინების სიგნალებთან. გმადლობთ, ყოველ შემთხვევაში მათ დატოვეს გამოშვების ჩანაწერები...

HID vs SNMP

ასე რომ, STM32F103C8T6 ავიღე, მე ასევე გადავწყვიტე ჩავუღრმავდე USB HID-ის თემას, USB HID აბსტრაქცია ძალიან კარგად ჯდება ყველა სახის სენსორების, სენსორების და სხვა PWM კონტროლირებადი დენის დრაივერების კონცეფციაში. რატომღაც მან გამახსენა SNMP, მხოლოდ ძალიან გამარტივებული ფორმით: HID დესკრიპტორები თამაშობენ SNMP MIB-ის როლს. როდესაც მოწყობილობა ინიციალიზდება მასპინძლის მიერ: „გამარჯობა, მასპინძელი! მე ყავის მწარმოებელი ვარ. მაქვს [დაწყების] ღილაკი, [კრემი], [შაქრის] კონტროლი, [დარჩენილი ყავა], [დარჩენილი წყალი], [დარჩენილი შაქარი], [ნაღების დარჩენილი ნაწილი]. აწიეთ მძღოლები, დააჭირე ღილაკს, მოდი ყავა დავლიოთ. არაფერს არ გახსენებს? SNMP დიალოგის მაგალითი: ”კარგი, გამარჯობა, მართვის სადგური პროგრამული უზრუნველყოფით 100,000 დოლარად. მე მაქვს გადამრთველის შასი $200000-ად და მაქვს კიდევ 4 მოდული 100000$ თითო; თითოეულს აქვს კიდევ 16 პორტი უხამსი სიჩქარით და უბრალოდ შეუძლებელია აქ ყველა ფუნქციის ჩამოთვლა... ცალ-ცალკე იკითხეთ თითოეული ნივთისთვის; ოჰ, დიახ, პროცესორის დატვირთვა ასეა და ასეა, მეხსიერება არის ასე და ასე...” და კიდევ ათეული გვერდი იმავე სულისკვეთებით.

მომეწონა HID-ის იდეა. მაგრამ როგორც კი ვინდოუსი დავტოვე საგანმანათლებლო ამოცანების მიღმა, მოციმციმე LED-ები (გადადით რეალურ UNIX გარემოში!), მან დაიწყო გაჟღენთვა ყველა დაულუქულ ბზარებში და თავი რაღაც უმწეო კოჭლად ვიგრძენი. პროექტის გამართვისას, მე ინსტინქტურად ავიღე რაღაც tcpdump (ასე ჰქვია: usbdump(8) ან usbmon), მაგრამ ვნახე მხოლოდ შეტყობინებები უცნობ ენაზე.

აშკარა გახდა: USB ავტობუსის შესახებ ფუნდამენტური ცოდნის ნაკლებობაა. თუ რომელიმე გამოცდილი IT სპეციალისტს ესმის OSI მოდელი და TCP/IP დასტა სადღაც ზურგის ტვინის დონეზე უბრალოდ აუცილებლობის გამო, მაშინ USB-თან დაკავშირებით სიტუაცია განსხვავებულია. გასაგებია: იქ შეგიძლიათ (დასაჭიროებათ) თვალთვალოთ ტრაფიკი იმავე tcpdump-ის საშუალებით და დააკონფიგურიროთ აპარატურა და პროგრამული უზრუნველყოფა, მაგრამ აქ ის მთლიანად ჩართულია და შეგიძლიათ რაღაცის გამოსწორება დრაივერის ან პროგრამული უზრუნველყოფის განახლებით (ან OS-ის ხელახლა ინსტალაციის გზით). მაგრამ ჩვენ შევიკრიბეთ აქ მხოლოდ კარგი პროგრამული უზრუნველყოფის შესაქმნელად, არა? რამდენიმე USB აღწერილობის ინტერნეტში წაკითხვის შემდეგ, გამიკვირდა, რამდენად დამაბნეველი შეიძლება იყოს დოკუმენტაცია. იმის განცდაც კი მქონდა, რომ შეგნებულად უნდოდათ ჩვენი შეცდომაში შეყვანა ნისლის გაშლით და კვირტში კონკურენციის მოშორებით. მე არ ვეთანხმები ამ მდგომარეობას!

კიდევ ერთი შესანიშნავი სქემა

ინტერნეტში შემხვდა კიდევ ერთი ილუსტრაცია (ეს იყო BMP ფორმატში, ხუმრობის გარეშე):

თავიდან ოპტიმისტურად გამოიყურება. საბოლოოდ, დასტა დაიშალა. თუმცა, ჩარჩოები ცუდად არის მონიშნული: მე მათ ვერტიკალური წერტილოვანი ხაზებით დავხატავდი, ხოლო EOF მხოლოდ პაუზაა, ფაქტობრივად არანაირი მონაცემი არ არის გადაცემული. მაგრამ ჩვენ ვიწყებთ კონტექსტის კითხვას და ვკარგავთ ავტორის ჭეშმარიტი განზრახვის გაგებას (დაგვაბნევს):

USB ავტობუსის ინტერფეისის მასპინძელი კონტროლერი წარმოქმნის პერსონალი;
პერსონალიგადაცემულია სერიული ბიტის გადაცემით NRZI მეთოდის გამოყენებით.
და აი კიდევ ერთი:
ყოველი ჩარჩოშედგება უმაღლესი პრიორიტეტისაგან ამანათები, რომლის შემადგენლობას აყალიბებს მასპინძელი მძღოლი;
თითოეული გადაცემაშედგება ერთი ან მეტი ტრანზაქციისგან;
თითოეული ტრანზაქცია შედგება პაკეტები;
ყოველი პლასტიკური ჩანთაშედგება პაკეტის იდენტიფიკატორისგან, მონაცემებისგან (ასეთის არსებობის შემთხვევაში) და საკონტროლო ჯამისგან.

როგორც ჩანს, ყველაფერი სწორად არის დახატული, მაგრამ რაც კითხულობთ, კითხვები უფრო და უფრო იზრდება. ავტობუსზე გადაცემული მინიმალური მონაცემთა სტრუქტურა ჩარჩოა თუ პაკეტი? ზოგადად, ზემოდან ქვემოდან უნდა ვიყუროთ თუ პირიქით? და რა არის კოდირებული NRZI მეთოდის გამოყენებით - ჩარჩოები, პაკეტები თუ უბრალოდ მთელი ბიტის ნაკადი ავტობუსში? ტრანზაქციები შედგება ამანათის, გადაცემის ან შესაძლოა რაიმე სახის ღირებული ამანათისგან?
რატომ არ შეგიძლია უბრალოდ: ანაწილებს თუ არა მასპინძელი ჯგუფი ტრანზაქციებში და ანაწილებს მათ დროის ნაწილებად, რომელსაც ეწოდება ჩარჩოები, რათა უპირატესობა მიანიჭოს დროის კრიტიკულ მონაცემებს (ვიდეო, აუდიო) მიმდინარე ავტობუსის გამტარუნარიანობაზე დაყრდნობით?დიახ, USB-ს აქვს ნიუანსი პაკეტის გადარიცხვის დაგეგმვისას, მე მათ ჯერ არ შევეხები.

ჩემი ხედვა USB დასტაზე

მე მიმაჩნია, რომ USB in NutShell, რომელიც აქ არის ნახსენები ჰაბზე (hurray, თარგმანი), ისევე როგორც USB Made Simple, კარგი დოკუმენტაციაა. მათზე დაყრდნობით, მე შევკრიბე USB სტეკის ჩემი ვერსია, ისევ დავხატავ.

ფიზიკური ფენა
ფიზიკურ დონეზე, დიფერენციალური წყვილის დირიჟორების ელექტრული რეჟიმების ნაკრები (მიწასთან ერთად) გამოიყენება იმ მდგომარეობების დასადგენად, რომლითაც ბიტის ნაკადი კოდირებულია NRZI მეთოდით ბიტის ჩაყრით: აქ ექვსი ზედიზედ "1"-ის შემდეგ ( კარგი, მე მინდოდა გადამეცემა, ვთქვათ, 0xffff) "0" არის ჩასმული, რომ მიმღები დიდხანს არ დარჩეს ერთ მდგომარეობაში; მიმღები არ არის ჩასმული „0“ და არ ჩაითვლება მონაცემად. მავთულის წყვილი მიწასთან ერთად შესაძლებელს ხდის მინიმუმ ოთხი სტატიკური მდგომარეობის ფორმირებას (ისინი დასახელებულია J, K, SE0, SE1). USB 2.0-ში SE1 არ გამოიყენება და დანარჩენი სამი დამატებით თამაშდება დინამიკაში (საათებით და გადასვლებით) კიდევ რამდენიმე საკონტროლო სიმბოლოს გადასაცემად (პაკეტის საზღვრები, გადატვირთვა, დაკავშირება/გათიშვა, ენერგიის დაზოგვა/გასვლა). არის კარგი ილუსტრაციები USB Made Simple, ნაწილი 3 - მონაცემთა ნაკადი.
იმათ. შედეგად, მონაცემები გადაცემულია ნულების და ერთის სახით, პლუს ყველა სახის საკონტროლო სიმბოლო, ასე რომ, ნორმალური მონაცემთა პაკეტების მომზადება შესაძლებელია მთელი ელექტროდინამიკური სამზარეულოდან.
(დამატებულია მკითხველის თხოვნით)
სურათების დონე
პაკეტის დონეზე, უსამართო პაკეტები გადაიცემა ჰოსტსა და მოწყობილობას შორის (ნახევრად დუპლექსის ხაზში მოწყობილ წყვილს შეუძლია მიმართოს გარეშე). პაკეტი შედგება SYNC მარკერისგან მიმღების საათის სინქრონიზაციისთვის, ბაიტების თანმიმდევრობით და EOP სიმბოლოსგან. პაკეტის სიგრძე ცვალებადია, მაგრამ მოლაპარაკება ხდება სტეკის ზედა დონეზე. პირველ ბაიტს ეწოდება Packet Identifier (PID), აქვს მარტივი ჭარბი ფორმატი ხმაურის იმუნიტეტისთვის და შესაფერისია შემდეგი დონის აპარატისთვის (პაკეტებიდან ტრანზაქციის აწყობისთვის). პაკეტები შიგთავსით (ერთ PID ბაიტზე მეტი) მიეწოდება საკონტროლო ჯამით (მოკლე CRC5 ან გრძელი CRC16, პაკეტის ტიპის მიხედვით). პროტოკოლის ანალიზატორმა, მინიმუმ, უნდა გვაჩვენოს პაკეტები.
ტრანზაქციის დონე
მომდევნო დონეზე საწყისი პაკეტებიმიდიან გარიგებები. ტრანზაქცია არის პაკეტების მცირე ნაკრები (სრული სიჩქარით USB 1, 2 ან 3), რომლებიც მკაცრად მიჰყვებიან ერთმანეთის მიყოლებით, რომლებსაც (ნახევრად დუპლექს რეჟიმში) მასპინძელი ცვლის საბოლოო წერტილთან და მხოლოდ ერთს. ძალიან მნიშვნელოვანია, რომ მხოლოდ მასპინძელი ხსნის ტრანზაქციას, ეს არის USB სპეციფიკა (MK firmware-ში ჩვენთვის ნაკლები პრობლემაა). ტრანზაქციის დონეზე შეგვიძლია ვისაუბროთ არხი(მილის) ჰოსტსა და მოწყობილობის ერთ-ერთ ბოლო წერტილს შორის, მაგრამ მე განზრახ ავარიდებ თავს OSI მოდელის ტერმინს „Data Link“. პროტოკოლის ანალიზატორმა მინიმუმ უნდა გაშიფროს ტრანზაქციები.
გადაცემათა დონე
ტრანზაქციების თავზე განვათავსებთ გადარიცხვების ფენას. USB-ში მათი ოთხი ტიპია: საკონტროლო გადარიცხვები ბოლო წერტილით No. 0, შეწყვეტის გადარიცხვები, იზოქრონიული გადარიცხვები და ნაყარი გადარიცხვები. ბოლო სამი არის ნაკადის არხების (სტრიმინგის მილი) ვარიანტები, რომელთა შესახებაც რამდენიმე სიტყვას მოგვიანებით ვიტყვი. ამ დონეზე ასევე უნდა იყოს კარგი პროტოკოლის ანალიზატორი.
განაცხადის ფენა
სტეკის ზედა ნაწილში, როგორც ყოველთვის, არის განაცხადის ფენა. რა ხდება აქ არის: ჰოსტის მიერ მოწყობილობის მისამართის დაყენება, მოწყობილობის შესახებ თავის შესახებ აღწერის ენაზე მოთხრობა, კონფიგურაციის არჩევის ჰოსტის ბრძანებები (გადაცემათა კონტროლი), მონაცემთა გაცვლა HID მოწყობილობებთან (მაგალითებში, მე ვიპოვე გადაცემა ჯერჯერობით შეფერხებით, მინდა ვცადო საკონტროლო), პრინტერზე ბეჭდვა და სკანირება, USB საცავზე წვდომა (დიდი ბლოკი), კომუნიკაცია ყურსასმენებითა და ვებკამერებით (იზოქრონიული) და ბევრი სხვა შესანიშნავი რამ.
დასრულების შეხება
დონეებიდან წამით დაბლა გადახტომით, შეგვიძლია დავამატოთ, რომ მასპინძელი პერიოდულად აგდებს იმავე Start of Frame (SOF) პაკეტებს ავტობუსზე, ყოფს დროს თანაბარ ინტერვალებად, მაგრამ ისე, რომ არ დაარღვიოს თავად ტრანზაქცია. ამიტომ, SOF პაკეტები შეიძლება ჩაითვალოს დამოუკიდებელ ტრანზაქციებად. USB ჩარჩო არ უნდა აგვერიოს OSI მოდელის მონაცემთა ბმული ფენის ჰომონიმთან. უმჯობესია დაიმახსოვროთ აუდიო CD-ის ფრეიმები (ჩარჩოები), ეს მხოლოდ დროის კვანტურია: მასპინძელი SOF პაკეტებით ავტობუსში „ჩარჩება“ ისე, რომ დაკავშირებული მოწყობილობები წინასწარ გეგმავენ მონაწილეობას ე.წ. იზოქრონიული გადაცემები, მონაცემთა ნაკადების მართვა რეალურ დროში. კარგად, ან ასე: ტრანზაქციების ჯგუფები დაგეგმილია მასპინძლის მიერ დროის ინტერვალებში, რომელსაც ეწოდება ჩარჩოები. ჩარჩო არის 1ms სრული სიჩქარით და 125μs მაღალი სიჩქარით USB-ზე, მაგრამ მაღალი სიჩქარე უფრო რთული სტანდარტია, უმჯობესია მისი ცალკე შესწავლა.
UPD:
კარგი კითხვა დაისვა მკითხველებმა: რაც შეეხება ფრაგმენტაციას? USB 2.0-ში ტრანზაქციის დონეზე და ქვემოთ ვერ ვნახე ფრაგმენტაციის ნიშნები, ე.ი. გარიგებები გამიზნულია მთლიანად გადასაცემად. ზოგიერთ შემთხვევაში, გადარიცხვები შეიძლება და უნდა დაიყოს რამდენიმე ტრანზაქციად, განსაკუთრებით იზოქრონიული რეჟიმების გათვალისწინებით. და გავიმეორებ, რომ ჯერ-ჯერობით მასპინძელი ჩვენთვის ყველა დაგეგმვას ევალება (MK მხარეს ნაკლები უნდა ვიფიქროთ).

ვუყურებ USB ტრაფიკს

ილუსტრაციების კარგი არჩევანი მოცემულია აღნიშნულ წიგნში USB Made Simple, თავი 5: www.usbmadesimple.co.uk/ums_5.htm

აი ერთი მათგანი


ასე რომ, ტრანზაქცია ყოველთვის ინიცირებულია ჰოსტის მიერ მოწყობილობის ერთ შერჩეულ ბოლო წერტილთან მიმართებაში (გარდა სპეციალური წერტილისა 0 ნომრით, შეიძლება იყოს 15-მდე მათგანი ერთ მოწყობილობაზე, მაგალითად, კომბინირებული კლავიატურა მაუსი, თერმომეტრი, ფლეშ დრაივი, ყავის მადუღარა და ზარის ღილაკი სანტექნიკის შეკვეთისთვის პიცისთვის).
თუ ჰოსტი მიიღებს მონაცემებს მოწყობილობიდან, ეს უკანასკნელი თავად ვერ გახსნის ტრანზაქციას, მაგრამ შეუძლია მხოლოდ დაელოდოს შესაფერისი მომენტიდა მონაწილეობა მიიღოს მასში. ჰოსტი ხსნის მოწყობილობას ტრანზაქციას პაკეტით PID = IN (Token ჯგუფი) და უზრუნველყოფს ავტობუსის თავისუფლებას საჭირო დროის განმავლობაში, მოწყობილობა ჩააგდებს პაკეტს მონაცემთა ჯგუფიდან, ტრანზაქციის ტიპის მიხედვით, ჰოსტს შეუძლია დაადასტუროს. წარმატება მესამე პაკეტით Handshake ჯგუფიდან (ACK, NAK, STALL, NYET), ტრანზაქცია დახურულია.
მოწყობილობაზე მონაცემების გაგზავნისას (PID = OUT, Token ჯგუფი), ჰოსტი ხსნის ტრანზაქციას, აგზავნის მონაცემთა პაკეტს (მონაცემები) და რეჟიმიდან გამომდინარე, შეუძლია ასევე მიიღოს Handshake პაკეტი, რომელიც ადასტურებს ტრანზაქციის წარმატებას.
ტრანზაქციის დასასრულს ყველაფერი ნორმალურად დაბრუნდება, მოწყობილობა კვლავ დაელოდება საკონტროლო პაკეტებს მასპინძლისგან.

USB გადაცემის რეჟიმები STM32 USB FS მაგალითებში

იმისათვის, რომ გამოიყენოთ ერთი წყვილი მავთული დისკიდან გადასაწერად ერთდროულად აუდიო-ვიდეო ნაკადით, მაუსის ჟესტებით და მაღალსიჩქარიანი ოსილოსკოპის სიგნალით, არსებობს სხვადასხვა ტიპისშეტყობინებები და გადაცემები.
ზემოთ მე უბრალოდ აღვწერე მარტივი ნაკადი არხი(Stream Pipe) ჰოსტსა და ბოლო წერტილს შორის, სადაც შევსების მქონე პაკეტები (მონაცემთა ჯგუფები) არ ატარებენ რაიმე სპეციალურ ან საკონტროლო ინფორმაციას თავად USB ქვესისტემაში. კორესპონდენციის სრული თავისუფლება, კონტროლერის ბიბლიოთეკამ უნდა უზრუნველყოს პრიმიტივები MK-ის მეხსიერებიდან ჰოსტში ან უკან, თვითნებური ზომის ბუფერის ჩამოტვირთვისთვის. მიეცით საშუალება MK ბიბლიოთეკას მასპინძელ დრაივერთან ერთად გაუმკლავდეს პაკეტებად ჭრას, გადაგზავნას და „დეფრაგმენტაციას“. STM32-ში ეს არის USB_SIL_Write() და USB_SIL_Read(), აღწერილია UM0424-ში. ისინი აბსტრაქციის ძალიან ლოგიკური დონეა. ჰოსტის მხარეს იხილეთ შესაბამისი დრაივერის აღწერა (მაგალითად, FreeBSD-ზე არის ugen(4)).
თუმცა, მკრეხელობად მიმაჩნია ისეთი მძიმე პერიფერიული მოწყობილობების გამოყენება, როგორიცაა USB მარტივი ნაკადის არხის ორგანიზებისთვის (საკითხავია: რა ჭირს USART?). მაგრამ, რა თქმა უნდა, ყველანაირი სიტუაციაა.
ნებისმიერ შემთხვევაში, იმისათვის, რომ USB ქვესისტემა საერთოდ გაცოცხლდეს და მოწყობილობა აღმოაჩინოს, საჭიროა საკონტროლო ტრანზაქციების გაცვლა.

პასუხისმგებლობის უარყოფა

შემდგომი მაგალითები იქნება აღნიშნული იმავე UM0424 ბიბლიოთეკიდან STMicroelectronics-ის Full Speed ​​USB-თან მუშაობისთვის, მაგრამ ისინი შექმნილია მათი მშობლიური დემო დაფებისთვის. აიღეთ მაგალითი ავტორის რაჯასგან, აჩვენეთ ინჟინერიის ცოდნა პროექტების თქვენს დემო დაფაზე ადაპტაციაში.

ყველაფერი ნათელია პროგრამული უზრუნველყოფის შესახებ: ეს არის მაგალითები არა სამრეწველო გამოყენებისთვის, შეიძლება იყოს შეცდომები, ზოგიერთი ნაწილი (როგორიცაა ბმული ცხრილი მასობრივი შენახვის მაგალითში) დაცულია პატენტით და თქვენ არ გაქვთ მათი გამოყენების უფლება. კომერციულ პროექტში. მაგრამ ეს არაფერია, ჩინელები შემდეგ ახერხებენ USB პროდუქტების გაყიდვას ბაზარზე, რისთვისაც ბიბლიოთეკის VID-ისა და PID-ის შეცვლასაც არ იწუხებენ თავს.

რკინისთვის, როგორც მივხვდი, კვარცით უნდა დაიწყო. მყავს Chelyabinsk PinBoard II 12 MHz კვარცით (ყველა ბიბლიოთეკა გათვლილია 8 MHz-ზე), PLL მულტიპლიკატორი 9-დან 6-მდე შევცვალე (ლინკი განმარტებებით), თორემ MK 72 MHz-ის ნაცვლად 108 MHz-მდე აჩქარდება და USB. არ წავა 72 MHz-ზე საჭირო 48 MHz-ის ნაცვლად. თქვენ ასევე შეგიძლიათ შეანელოთ MK სიჩქარე 48 MHz-მდე USB ავტობუსის გამყოფის შეცვლით ერთი და ნახევარიდან ერთზე. სპეციალისტებს არ მოსწონთ HSI MK-ის შიდა გენერატორის გამოყენება: სიხშირე შეიძლება ოდნავ გადაინაცვლოს გათბობის გამო და ძნელია პროგნოზირება შედეგების USB-ზე. კარგად, ნუ დაივიწყებთ პერიფერიაზე, რა თქმა უნდა. SPI/SDIO ფლეშ მეხსიერების გარეშე, მასიური შენახვის მაგალითიდან შეგიძლიათ მხოლოდ /dev/null-ის ანალოგის გაკეთება, მაგრამ არ შეგიძლიათ მისი ფორმატირება :-)

აკონტროლეთ გადაცემები და შეტყობინებების არხები
USB-ზე ფიქრისას მახსოვს კარგი ძველი PPP პროტოკოლი თავისი LCP, IPCP, CCP და ასევე xzCP. სპეციალური ტიპის შეტყობინებების გაცვლა ჰოსტსა და No0 ბოლო წერტილს შორის არის x3CP-ის ადგილობრივი ექვივალენტი.
საკონტროლო გადაცემების საშუალებით ხდება მოწყობილობის ინიციალიზაცია, იღებს მისამართს, ეუბნება მასპინძელს თავის შესახებ დესკრიპტორების ენაზე (ისე რომ მან შეძლოს პოვნა და გააქტიურება საჭირო მძღოლი). საკონტროლო ოპერაციების გარეშე, მარტივი ნაკადი არ იმუშავებს, თუ მოწყობილობა არ პასუხობს ფორმაში, ჰოსტი სწრაფად გათიშავს პორტს: პროტოკოლი უნდა დაიცვან.
პრინციპში, ოქმი არ კრძალავს ჩამოკიდებას საკონტროლო წერტილი No 0 და მონაცემთა გაცვლა, შეფერხების რეჟიმის მსგავსი. ამავდროულად, დაფიქრდით: როგორ განაახლებთ MK firmware-ს, ასე ვთქვათ, სფეროში? პროგრამისტი მზად გაქვს? არის სხვა გამოსავალი.
მაგალითი: მოწყობილობის firmware განახლება
შეწყვეტილი გადაცემები
ეს ჯიში ( გადაცემის შეწყვეტა) განკუთვნილია საკონტროლო ტრანზაქციების მსგავსი მცირე ზომის გაცვლისთვის. არა, მოწყობილობა ვერ წყვეტს ჰოსტს, ის ელოდება გამოკითხვას, მათი სიხშირე და პაკეტის ზომები წინასწარ არის მითითებული მოწყობილობის აღწერში. კარგად შეეფერება ყველა სახის დისტანციურ მართვას, სენსორებს, მაუსებს, LED-ებს და სხვა HID ყავის მწარმოებელს. არხი ყოველ წერტილში წყვეტებით არის ცალმხრივი.
მაგალითები: მორგებული HID, ჯოისტიკის მაუსი, ვირტუალური COM პორტი
იზოქრონიული გადაცემები
Χρόνος ბერძნულად ნიშნავს "დროს". იზოქრონიული გადაცემა ( იზოქრონიული გადაცემა) - ადგილობრივი მაღალტექნოლოგიური, რომელიც საშუალებას გაძლევთ მართოთ მონაცემთა ნაკადები რეალურ დროში. მას აქვს გარანტირებული (მაგრამ არა აუცილებლად ფართო) გამტარობა და არ არის დამადასტურებელი ტრანზაქციები, ისევე როგორც UDP QoS-ით. გატეხილი პაკეტი? სწორედ ღმერთმა ქრონოსმა უბიძგა MK ფეხზე. არ არის საჭირო ამანათის ხელახლა გაგზავნის მცდელობა, თორემ ღმერთი განაწყენდება. თუმცა, ჩვენ ჩუმად ვამოწმებთ ჩეკსუმებს Chronos-ისგან. იზოქრონიული გადაცემა კარგია აუდიო-ვიდეო და რეალურ დროში საზომი სისტემებისთვის, ასევე სხვა სათამაშოებისთვის. ორმაგი გამოყენება. მიუხედავად იმისა, რომ ზოგიერთი მათგანი შეიძლება. უფრო საინტერესოა რაიმე სახის AVR-ის გათიშვა, ჩვენს ARM-თან დაკავშირება USART-ის ან SPI-ის მეშვეობით. იზოქრონიული ოპერაციები ჩართულია ჩარჩოს სიგნალიზაციაში (გაიხსენეთ SOF პაკეტის მონიშვნა).
მაგალითი: USB ხმოვანი დინამიკი
დიდი ბლოკის ტრანსმისია
არა, ჩვენ ცემენტის პარკებს არ მივიღებთ. ვფიქრობ, ყველამ ისწავლა სხვადასხვა ოპერაციული რეჟიმი USB დისკები. ტრანსფერები ნაყარი გადაცემაგქონდეთ მიზანი, გაგზავნონ მონაცემები რაც შეიძლება მეტი და რაც შეიძლება სწრაფად, ყოველთვის გატეხილი პაკეტების გადაცემით, მაგრამ გამტარუნარიანობის გარანტიის გარეშე, საჭიროების შემთხვევაში გადასცეს ის იზოქრონიულ გადაცემას (როგორც TCP-ში QoS-ის გარეშე). შესახებ შიდა სტრუქტურამე უკვე ვისაუბრე USB ფლეშ დრაივებზე, ახლა შეგიძლიათ ჩამოტვირთოთ და გაუშვათ სამუშაო პროტოტიპი. მე თვითონ არ მიცდია, მაგრამ SCSI ბრძანებების ცხრილი მაგალითის აღწერაში (როგორც იყო, სხვათა შორის) საკმაოდ სიმბოლურია. მე ვერ ვიპოვე აცვიათ მართვის ალგორითმის ნიშნები NAND მეხსიერებისთვის :-)
შენიშვნა: STM პატენტის დაცვა ვრცელდება ადგილებზე.
მაგალითი: მასობრივი შენახვა

რა დარჩა გამოუცნობი

USB-ზე სხვა სახელმძღვანელოს დამზადების მიზანი არ მაქვს, ჩემს გარეშეც საკმარისია და კარგად არის აღწერილი: ელექტრული ნაწილი, პროტოკოლის დეტალები, ჰაბებთან მუშაობა, აღწერის ენა და HID აბსტრაქციის დონე, პრობლემები VID/ PID უნიკალურობა, USB 3.0 და USB ავტობუსის მრავალი სხვა შესანიშნავი ფუნქცია, როგორც ჩვენთვის სასარგებლო და არც ისე ბევრი. IT სპეციალისტებისთვის მე განსაკუთრებით გირჩევთ ექსკურსიას ბნელ მხარეს მტრის მოწყობილობების მიმოხილვით (ფლეშ დრაივი შენიღბული HID კლავიატურით, რომელიც საშინელ რამეებს გააკეთებს).

ბმულები

Custom HID მაგალითის ადაპტაცია უფასო Em::Blocks გარემოსა და ბიუჯეტის დემო დაფას STM32F103C8T6-ის მიერ წარმოებული LC-Tech Industrial Electronics და IT ხალხი. ეს არის ერთგვარი ინჟინერია ინი და იანი, თითოეულ ჩვენგანს აქვს ორივეს წილი.

სამრეწველო ელექტრონიკის ინჟინრებს აქვთ შესანიშნავი ცოდნა და უნარები ტექნიკის სფეროში. უყურებს ელექტრონული წრე, თითქმის ფიზიკურად იწყებენ მისი ყველა დინების შეგრძნებას პოტენციალებით, ასევე მუშაობენ დენის სქემებთან და (დიდი, სწრაფი, საშიში) სამრეწველო პროდუქტებით. MK-ის პროგრამირების მიდგომა შესაბამისია: მან უბრალოდ უნდა გამოსცეს საჭირო ლოგიკური დონეები სწორ ფეხებზე სწორ დროს, არ აქვს მნიშვნელობა რა გზით. ისინი კონსერვატიულები არიან ტექნოლოგიაში (არ ერევიან - ის მუშაობს), მძიმე MK პერიფერიული მოწყობილობები განსაკუთრებით არ არის მოწონებული. ობიექტზე ორიენტირებული პროგრამირების განხილვისას, ინფორმაციის უსაფრთხოება, გიგანტური პროექტები მილიონი ხაზით კოდით და ყველა სახის ლამაზი გრაფიკული ინტერფეისებიმოიწყინე. პაკეტებზე ორიენტირებული USB ავტობუსის ნაცვლად, მათ ურჩევნიათ USART სტრიმინგის რეჟიმი, გაუმჯობესებული ან ჩვეულებრივი RS-232 ან უფრო სასტიკი RS-485 (სერიული ავტობუსი სამრეწველო აპლიკაციებისთვის, 10 მბიტ/წმ-მდე 15 მ, 100-მდე. კბიტ/წმ 1200 მ, 32 მოწყობილობამდე).

IT ხალხი აღზრდილია გასაგებად ოპერაციული სისტემები, ქსელური ინფრასტრუქტურა და რთული ურთიერთქმედებები, ელიტა კარგად ერკვევა ინფორმაციულ უსაფრთხოებაში და ესმის სხვის სისტემაში შეღწევის ყველა სახის უხილავი გზა. ზოგს ნამდვილად უყვარს კატები (როგორ შეიძლება არ გიყვარდეს ისინი? თუმცა მე არ ვინახავ, არ ვაშენებ და არ ვამზადებ :-). ბევრ ადამიანს უყვარს ინფორმაციის თავისუფლება, კორპორაციების/მთავრობების კრიტიკა და ბუნების ძალების დამარცხება აზროვნების ძალით. ისინი პათოლოგიურად ზარმაცები არიან, მაგრამ უყვართ ახალი ტექნოლოგიები და დაგრეხილი საინჟინრო თავსატეხები ძვირადღირებული სათამაშოებით (სასურველია გადაჭრილი პროგრამული უზრუნველყოფის დონეზე ან, უკიდურეს შემთხვევაში, ჯუმპერები). ურთიერთობები გამაგრილებელ რკინასთან დაცულია: არ ჰკითხოთ IT სპეციალისტს მოსწონს თუ არა გამაგრილებელი უთო, შეიძლება არასწორად გაიგოს; უმჯობესია ჰკითხოთ, მოსწონს თუ არა მას ელექტრონული სქემების შედუღება.

რაზე ვლაპარაკობ? ჩვენ უბრალოდ სხვანაირად ვხედავთ ამ სამყაროს... ბოლოს და ბოლოს Linux-ის ბირთვიიგივე ბიჭებმა ამოჭრეს ის C მოდულებიდან და ასამბლერის ჩანართებიდან კონკრეტული პლატფორმებისთვის და თითქოს ჰოლივარების გარეშე გაართვეს თავი. მე ვხედავ ნამდვილად სერიოზულ პროექტს, როგორც მრავალ ბირთვიან სისტემას, რომელიც აერთიანებს უახლეს მიკროკონტროლერებს მძიმე პერიფერიულ მოწყობილობებთან, მაგრამ არ გამოვრიცხავ კომბინაციებს კლასიკურ მოდელებთან, როგორიცაა AVR: მათი გამოყენება შესაძლებელია ტექნიკური პროგრესის ზოგიერთი კრიტიკული, სწრაფად მბრუნავი შუბის დასაკიდებად. თუ კოდი წლების განმავლობაში გამოცდილია, მაშინ რატომაც არა?

ტეგების დამატება

2008 წლის ბოლოს. როგორც თქვენ შეიძლება მოელოდეთ, ახალი სტანდარტიგაიზარდა გამტარუნარიანობა, თუმცა ზრდა არ არის ისეთი მნიშვნელოვანი, როგორც სიჩქარის 40-ჯერ ზრდა USB 1.1-დან USB 2.0-ზე გადასვლისას. ნებისმიერ შემთხვევაში, გამტარუნარიანობის 10-ჯერ გაზრდა მისასალმებელია. USB 3.0მხარს უჭერს გადაცემის მაქსიმალური სიჩქარე 5 გბიტი/წმ.გამტარუნარიანობა თითქმის ორჯერ მეტია, ვიდრე თანამედროვე სერიული ATA სტანდარტი (3 გბიტი/წმ, ზედმეტი ინფორმაციის გადაცემის გათვალისწინებით).

USB 3.0 ლოგო

ყველა ენთუზიასტი დაადასტურებს, რომ USB 2.0 ინტერფეისი არის თანამედროვე კომპიუტერებისა და ლეპტოპების მთავარი შეფერხება, რადგან მისი მაქსიმალური გამტარუნარიანობა 30-დან 35 მბ/წმ-მდეა. მაგრამ თანამედროვეებს აქვთ 3.5" მყარი დისკებიდესკტოპის კომპიუტერებისთვის გადაცემის სიჩქარემ უკვე გადააჭარბა 100 მბ/წმ-ს (ლაპტოპების 2.5 ინჩი მოდელებიც ჩნდება, ახლოვდება ამ დონეს). მაღალსიჩქარიანი მყარი მდგომარეობის დისკები წარმატებით გადალახეს 200 მბ/წმ ბარიერი. ხოლო 5 გბიტ/წმ (ან 5120 მბიტ/წმ) შეესაბამება 640 მბ/წმ.

ჩვენ არ ვფიქრობთ, რომ უახლოეს მომავალში მყარი დისკებიმიუახლოვდება 600 მბ/წმ დონეს, მაგრამ შემდეგი თაობები მყარი მდგომარეობის დისკებიშეიძლება აღემატებოდეს ამ რაოდენობას რამდენიმე წელიწადში. გამტარუნარიანობის გაზრდა სულ უფრო მნიშვნელოვანი ხდება, რადგან ინფორმაციის რაოდენობა იზრდება და შესაბამისად იზრდება მისი სარეზერვო ასლის დრო. რაც უფრო სწრაფად იმუშავებს საცავი, მით უფრო მოკლე იქნება სარეზერვო დრო, მით უფრო ადვილი იქნება სარეზერვო გრაფიკში "ფანჯრების" შექმნა.

სიჩქარის შედარების ცხრილი USB მახასიათებლები 1.0 – 3.0

ციფრულ ვიდეოკამერებს დღეს შეუძლიათ გიგაბაიტი ვიდეო მონაცემების ჩაწერა და შენახვა. HD ვიდეო კამერების წილი იზრდება და მათ უფრო ტევადი და სწრაფი ჩაწერის მეხსიერება სჭირდებათ დიდი რაოდენობითმონაცემები. თუ იყენებთ USB 2.0-ს, მაშინ რედაქტირებისთვის რამდენიმე ათეული გიგაბაიტი ვიდეო მონაცემების კომპიუტერში გადატანას დიდი დრო დასჭირდება. USB Implementers Forum თვლის, რომ გამტარუნარიანობა დარჩება ფუნდამენტურად მნიშვნელოვანი და USB 3.0საკმარისი იქნება ყველა სამომხმარებლო მოწყობილობისთვის მომდევნო ხუთი წლის განმავლობაში.

8/10 ბიტიანი კოდირება

მონაცემთა საიმედო გადაცემის უზრუნველსაყოფად USB 3.0 ინტერფეისიიყენებს ჩვენთვის ნაცნობ 8/10 ბიტიან კოდირებას, მაგალითად, Serial ATA-დან. ერთი ბაიტი (8 ბიტი) გადაიცემა 10-ბიტიანი კოდირებით, რაც აუმჯობესებს გადაცემის საიმედოობას გამტარუნარიანობის ხარჯზე. მაშასადამე, ბიტებიდან ბაიტებზე გადასვლა ხორციელდება 8:1-ის ნაცვლად 10:1 თანაფარდობით.

USB 1.x – 3.0 გამტარუნარიანობის და კონკურენტების შედარება

ენერგიის დაზოგვის რეჟიმები

რა თქმა უნდა, მთავარი მიზანიინტერფეისი USB 3.0 არის ხელმისაწვდომი გამტარუნარიანობის გაზრდათუმცა, ახალი სტანდარტი ეფექტურად ოპტიმიზებს ენერგიის მოხმარებას. USB 2.0 ინტერფეისი მუდმივად იკვლევს მოწყობილობის ხელმისაწვდომობას, რომელიც მოიხმარს ენერგიას. ამის საპირისპიროდ, USB 3.0 აქვს ოთხი კავშირის მდგომარეობა, სახელად U0-U3. კავშირის მდგომარეობა U0 შეესაბამება მონაცემთა აქტიურ გადაცემას და U3 აყენებს მოწყობილობას „ძილს“.

თუ კავშირი უმოქმედოა, მაშინ მონაცემთა მიღებისა და გადაცემის შესაძლებლობა გაუქმდება U1 მდგომარეობაში. სახელმწიფო U2 ერთი ნაბიჯით წინ მიდის შიდა საათის გამორთვით. შესაბამისად, დაკავშირებულ მოწყობილობებს შეუძლიათ გადავიდნენ U1 მდგომარეობაში მონაცემთა გადაცემის დასრულებისთანავე, რაც მოსალოდნელია ენერგიის მოხმარების მნიშვნელოვან უპირატესობას USB 2.0-თან შედარებით.

უმაღლესი დენი

ენერგიის მოხმარების სხვადასხვა ქვეყნების გარდა, სტანდარტი USB 3.0 განსხვავებულია USB 2.0-დან და უფრო მაღალი მხარდაჭერილი დენი. თუ USB 2.0 უზრუნველყოფდა მიმდინარე ბარიერს 500 mA, მაშინ ახალი სტანდარტის შემთხვევაში შეზღუდვა გადავიდა 900 mA-მდე. კავშირის დაწყების დენი გაიზარდა 100 mA-დან USB 2.0-დან 150 mA-მდე USB 3.0-ისთვის. ორივე პარამეტრი საკმაოდ მნიშვნელოვანია პორტატული მყარი დისკებისთვის, რომლებიც ჩვეულებრივ საჭიროებენ ოდნავ მაღალ დენებს. ადრე, პრობლემის გადაჭრა შეიძლებოდა დამატებითი USB დანამატის გამოყენებით, ორი პორტიდან ენერგიის მიწოდებით, მაგრამ მონაცემთა გადაცემისთვის მხოლოდ ერთის გამოყენებით, მიუხედავად იმისა, რომ ეს არღვევდა USB 2.0 სპეციფიკაციას.

ახალი კაბელები, კონექტორები, ფერადი კოდირება

USB 3.0 სტანდარტი უკუთავსებადია USB 2.0-თანეს ნიშნავს, რომ შტეფსელი იგივეა, რაც ჩვეულებრივი ტიპის A შტეფსელი. ეს ნიშნავს, რომ თქვენ უნდა ჩასვათ USB 3.0 შესაერთებელი ბოლომდე USB პორტი 3.0 USB 3.0 ოპერაციული რეჟიმის უზრუნველსაყოფად, რომელიც საჭიროებს დამატებით ქინძისთავებს. წინააღმდეგ შემთხვევაში მიიღებთ USB 2.0 სიჩქარეს. USB Implementers Forum გირჩევთ, რომ მწარმოებლებმა გამოიყენონ Pantone 300C ფერის კოდირება კონექტორის შიგნით.

მსგავსი სიტუაცია იყო USB ტიპის B შტეფსელთან დაკავშირებით, თუმცა განსხვავებები ვიზუალურად უფრო შესამჩნევია. USB 3.0 დანამატის ამოცნობა შესაძლებელია ხუთი დამატებითი ქინძისთავით.

USB 3.0 არ იყენებს ოპტიკურ ბოჭკოვან სისტემას, რადგან ძალიან ძვირია მასობრივი ბაზრისთვის. აქედან გამომდინარე, ჩვენ გვაქვს ძველი კარგი სპილენძის კაბელი. თუმცა, ახლა მას ექნება ცხრა და არა ოთხი მავთული. მონაცემთა გადაცემა ხორციელდება ხუთი დამატებითი მავთულიდან ოთხზე დიფერენციალურ რეჟიმში (SDP–დაფარული დიფერენციალური წყვილი). ერთი წყვილი მავთული პასუხისმგებელია ინფორმაციის მიღებაზე, მეორე კი გადაცემაზე. მოქმედების პრინციპი მსგავსია Serial ATA-ს, მოწყობილობები იღებენ სრულ გამტარობას ორივე მიმართულებით. მეხუთე მავთული არის "დამიწება".