რა არის 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
Post a Comment