Skip to main content

SPI ინტერფეისი

რა არის SPI?  

SPI - serial peripheral interface, მიმდევრობითი პერიფერიალური ინტერფეისი, გამოიყენება მიკროკონტროლერებში და FPGA-ებში ინფორმაციის მიმდევრობითი გადაცემისთვის.

სურათი 1. SPI კავშირი.





SCK-სინქრონიზაციის გამომსვლელი(ახდენს ბიტის გაგზავნას და მიღებას ერთდროულად, სრული დუპლექსი)
MOSI-(mater out, slave in)მთავარი მოწყობილობის გამომსვლელი, დაქვემდებარებულის შემსვლელი.
MISO-(master in, slave out)მთავარი მოწყობილობის შემსვლელი, დაქვემდებარებულის გამომსვლელი
CS-(chip select ან SS ანუ, slave select)დაქვემდებარებული მოწყობილობის ასარჩევი, მთავარი მოწყობილობის გამომსვლელი.(ყოველი დაქვემდებარებულის არჩევა ხდება ამ გამომსვლელზე ლოგ. 0 ის შემთხვევაში, რადგან აქტიური მდგომარეობა არის ინვერსიული. ყოველ დაქვემდებარებულს აქვს ეს შემსვლელი. "ველაპარაკებით" იმ დაქვემდებარებულ მოწყობილობას რომელსაც ავირჩევთ ამ "პინის" საშუალებით).

სურათი 2. SPI მულტი კავშირი.







შემუშავებულია  ფირმა მოტოროლას მიერ 1980 წლების ბოლოს, მისი პოპულარულობა განპირობებულია მისი სიმარტივისა და სისტემის მიმართ ძალიან მცირე მოთხოვნების გამო. მიკროკონტროლერებში გვხვდება ჩაშენებული ინტერფეისების სახით,ასევე შესაძლებელია მისი პროგრამულად იმპლემენტირებაც.

მუშაობის პრინციპი.

SPI მიეკუთვნება სინქრონული, სრულ დუპლექსიან ინტერფეისების ტიპს. ყველა ბიტის მიღება თუ გადაცემა ხდება ე.წ "clock" გამომსვლელის  ტაქტზე, ანუ ესა ასე ვთქვათ სტრობის იმპულსი(სინქრონიზაცია) რომელიც აგზავნის და წერს ბიტს, წანაცვლების(Shift) რეგისტრში.(ვისაც გაქვთ ნასწავლი ციფრული სქემოტექნიკა ,უცბად აღიქვავთ როგორ მუშაობს ეს მექანიზმი, გავიხსენოთ სინქრონული RS ტრიგერი, ან თუნდაც Delay ტრიგერი)
SPI მუშაობს master/slave რეჟიმში , ინიციატორი არის ყოველთვის მასტერი , სლეივი ანუ დაქვემდებარებული მოწყობილობა პასუხობს შესაბამისი პროტოკოლის მიხედვით , თუ რას ითხოვს მისგან მთავარი მოწყობილობა ანუ მასტერი. სრული დუპლექსის მექანიზმი მუშაობს შემდეგნაირად: სურათ 3-ზე როგორც ხედავთ გვაქვს ინფორმაციის გადაცემის და მიღების დამოუკიდებლი გამტარები(პინები) . დავაკვირდეთ მე-3-ე სურათს, სინქრონიზაციის ყოველ  ტაქტურ იმპულსზე, ხდება SPI დატა რეგისტრის წანაცვლება მარჯვნივ, ანუ 8 ბიტი მიმდევრობით გამოდის გარეთ (LSB ან MSB, დამოკიდებულია მიკროკონტროლერის კონფიგურაციაზე)ყოველ ტაქტურ იმპულსზე 1 ბიტი, პარალელურად რეგისტრში იწერება დაქვემდებარებული მოწყობილობის მიერ გამოშვებული ბიტი(თავისუფალ ადგილს იკავებს ეს ბიტი, SPI დატა რეგისტრის MSB  დან მარჯვნივ) . ხდება საინტერესო რამ, გაგზავნილი ბაიტის ადგილს იკავებს დაქვემდებარებულისგან მიღებული ბაიტი, ანუ 8 სინქრონიზაციის ტაქტზე ხდება ბაიტის გაგზავნაც და მიღებაც, რასაც ქვია ბაიტის ტრანსფერი. იგივე ხდება დაქვემდებარებული მოწყობილობის მხარეს.
SPI ინტერფეისში მაქსიმალური სინქრონიზაციის "პინის" სიხშირე არის მიკროკონტროლერის SPI ტაქტური სიხშირე / 2. მაგალითად თუ ჩაშენებული SPI მოწყობილობის ტაქტური სიხშირე არის 32 Mhz  ,სინქრონიზაციის  მაქსიმალური სიხშირე იქნება 16 Mhz  ანუ სიჩქარე - 16მბ/წ.


სურათი 3. SPI ტრანსფერი.



რეჟიმები.

არსებობს SPI ის 4 რეჟიმი, განსხვავება მათ შორის   არის სინქრონიზაციის ტაქტური "პინის" კონფიგურაციაში.
CPOL - სინქრონიზაციის პოლარობა (0 ან 1).
CPHA - სინქრონიზაციის ფრონტი(0 ან 1).
როცა CPOL = 0,  აქტიური ტაქტური იმპულსი არის ლოგ.1 მდგომარეობა.
როცა CPOL = 1, აქტიური ტაქტური იმპულსი არის ლოგ.0 მდგომრეობა.
როცა CPHA = 0, ბიტის არჩევა ხდება წინა ფრონტზე, ანუ როცა ლოგ.0 დან ლოგ.1 ზე გადადის სინქრონიზაციის გამომსვლელი(CPOL = 0) თუ CPOL = 1, პირიქით პროცესი, ლოგ.1 დან ლოგ.0 ზე გადასვლისას ხდება ბიტის არჩევა.
როცა CPHA = 1, ბიტის არჩევა ხდება უკანა ფრონტზე, ანუ როცა ლოგ.1 დან ლოგ.0 ზე გადადის სინქრონიზაციის გამომსვლელი(CPOL = 0) თუ CPOL = 1, პირიქით პროცესი, ლოგ.0 დან ლოგ.1 ზე გადასვლისას ხდება ბიტის არჩევა.

ასევე შესაძლოა ზოგიერთ მიკროკონტროლერს ჰქონდეს LSB ან MSB(ბაიტის მიმართულება საიდან დაიწყოს) ასარჩევი ბიტი საკონფიგურაციო რეგისტრში.მაგ.STM32

დავაკვირდეთ მე-4-ე სურათს,სადაც კარგად ჩანს თითოეული რეჟიმის მუშაობა.

სურათი 4. SPI რეჟიმები.





რეჟიმი 0. CPOL  = 0,  CPHA = 0.
რეჟიმი 1. CPOL  = 0,  CPHA = 1.
რეჟიმი 2. CPOL  = 1,  CPHA = 0.
რეჟიმი 3. CPOL  = 1,  CPHA = 1.

ყველაზე ხშირად გამოიყენება რეჟიმი 0.

SPI - უპირატესობა:

1. ძალიან მარტივი პროგრამული და აპარატურული მექანიზმი.
2. არ გვაქვს სიჩქარის ლიმიტი(შესაძლოა ქონდეს მოწყობილობას, თუმცა SPI ის არ აქვს)
3. "მულტი სლეივი" .
4. სრული დუპლექსი.

SPI - ნაკლი:

1. ყოველ დაქვემდებარებულ მოწყობილობას ჭირდება დამოუკიდებელი "პინი" .
2. არ გვაქვს მექანიზმი რითაც მივხდებით, ბაიტი მივიდა თუ არა.(შესაძლოა ამის იმპლემენტირება პროტოკოლში)
3. ყოველი ახალი დაქვემდებარებული მოწყობილობის დამატებისას უნდა შეიცვალოს პროგრამული კოდი.
4. SPI -ის სალტეზე შესაძლებელია მხოლოდ 1 მთავარი მოწყობილობა გვქონდეს(მაგალითად I2C არ აქვს ეს შეზღუდვა).

Comments

Popular posts from this blog

სიმ800, სიმ900 პირველი ნაბიჯები...

გამარჯობათ მეგობრებო, განვიხილავთ ზემოთ ნახსენები მოდემების ფიზიკურ მიერთებას მიკროკონტროლერთან და  სამუშაო კოდს. ფიზიკური მიერთება: სადამ მიერთების განხილვას დავიწყებდეთ, ვიტყვი რომ, მოდემის სამუშაო ძაბვა არის 3.4V დან 4.4V მდე, ოპტიმალური ძაბვა 4 ვოლტი. როდესაც მოდემი გადის რეგისტრაციას(კვების მიერთების შემდეგ) მოხმარებული პიკური დენი აღწევს 2 ამპერამდე, ასევე როდესაც ირთვება რადიო გადამცემის ნაწილი(ინფორმაციის გაგზავნისას) ამიტომ , კვების წყარო უნდა უზრუნველყოფდეს ამ სიმძლავრეს , თუ არ გვაქვს 2 ამპერიანი წყარო , შეგვიძლია მივაერთოდ 1 ამპერიანი, ასეთ შემთხვევაში აუცილებელია მოდემის კვების პარალელურად ჩავსვათ 1500-2200 მიკროფარადიანი კონდენსატორი რაც შეიძლება მოდემთან ახლოს. ელექტროლიტური კონდენსატორის დაყენება აუცილებელია ასევე იმ შემთხვევაშიც კი, როდესაც ვიყენებთ 2 ამპერიან კვების წყაროს, თუმცა ასეთ შემთხვევაში 220-470 მიკროფარადიანიც საკმარისია(თუ მოდულს ვიყენებთ აუცილებლად ეყენება ასეთი კონდენსატორი) . იმ შემთხვევაში თუ დაფას ჩვენ ვხაზავთ , აუცილებლად უნდა გავითვალისწინ...

MST პროტოკოლი

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