spi კავშირი. სერიული ინტერფეისი SPI. SPI კავშირის დიაგრამები

თუ უკვე იცით, რა არის SPI ინტერფეისი და რისთვის გამოიყენება, მაშინ ნაკლებად სავარაუდოა, რომ რაიმე ახალი ისწავლოთ ამ სტატიიდან. მასში შევეცდები აგიხსნათ ამ ინტერფეისთან დაკავშირებული ძირითადი ცნებები, შემდეგში კი გეტყვით, თუ როგორ გამოიყენოთ STM32 მიკროკონტროლერებში ჩაშენებული SPI მოდული. ნებისმიერი სხვა ინტერფეისის მსგავსად, SPI გამოიყენება მონაცემთა ერთი მოწყობილობიდან მეორეზე გადასატანად. SPI ავტობუსზე მოწყობილობები, როგორც წესი, არ არის თანაბარი, არის ერთი მთავარი მოწყობილობა (Master) და ბევრი slave მოწყობილობა (Slave). როგორც წესი, მიკროკონტროლერი მოქმედებს როგორც მთავარი, ხოლო სლავური მოწყობილობები არის სხვადასხვა პერიფერიული მოწყობილობა, როგორიცაა თერმული სენსორები, ამაჩქარებლები, რეალურ დროში საათები და ა.შ. ბატონს უმიზეზოდ ეძახიან ბატონს, არც ერთი მონა არ განახორციელებს მონაცემთა გაცვლას. თავად SPI ავტობუსი ფიზიკურად შედგება 4 მავთულისგან:

  • MOSI– მონაცემები გადის ამ მავთულიდან Master-დან Slave მოწყობილობამდე
  • MISO— მონაცემები გადის ამ მავთულის მეშვეობით Slave-დან Master მოწყობილობამდე
  • SCK— ამ მავთულის მეშვეობით Master გადასცემს საათის სიგნალს Slave მოწყობილობებზე
  • C.S.– Chip select (ან SS – Slave select) – ამ მავთულის მეშვეობით, ოსტატი ცხადყოფს მონას, რომ ახლა მას უგზავნის მონაცემებს.

ოთხივე ხაზის აღწერიდან შეგვიძლია შემდეგი დასკვნის გაკეთება:

  • SPI არის სერიული ინტერფეისი. მონაცემთა ბიტები გადაიცემა ერთმანეთის მიყოლებით
  • SPI არის სინქრონული ინტერფეისი. ეს ნიშნავს, რომ მონაცემთა გადაცემა (ორივე მიმართულებით) ხდება მხოლოდ მაშინ, როდესაც მასტერი წარმოქმნის საათის იმპულსებს და გადასცემს მათ SCK მავთულის მეშვეობით ავტობუსის სხვა მოწყობილობებზე.
  • ერთ ავტობუსზე შეიძლება რამდენიმე მოწყობილობის დაკავშირება, რომელთა რაოდენობა თეორიულად შეუზღუდავია.
  • SPI უზრუნველყოფს სრული დუპლექსის რეჟიმში კომუნიკაციის შესაძლებლობას. სანამ მასტერი აგენერირებს საათის იმპულსებს, მას შეუძლია მონაცემების გაგზავნა სლავ მოწყობილობაზე და ერთდროულად მიიღოს იგი მისგან.

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

როგორც ნახატზე ჩანს, CS-ის გარდა ყველა ინტერფეისის ხაზი უბრალოდ გაერთიანებულია ერთმანეთთან. თითოეული slave მოწყობილობისთვის, მასტერს აქვს ცალკე CS გამომავალი. მეორე slave მოწყობილობასთან მონაცემების გაცვლის მიზნით, მასტერი დააყენებს CS2 პინს დაბალ ლოგიკურ დონეზე, ხოლო დანარჩენ ორს (CS1 და CS3) მაღალ დონეზე. ამრიგად, Slave_1 და Slave_3 საერთოდ არ გამოავლენენ სიცოცხლის ნიშანს და, შესაბამისად, ხელს არ შეუშლიან ბატონსა და მონას_2-ს შორის კომუნიკაციას. კიდევ ერთხელ ხაზგასმით აღვნიშნავ, რომ CS ფეხის აქტიური მდგომარეობა არის ლოგიკური ნული. ამ სქემას აქვს ერთი ნაკლი - 10 slave მოწყობილობისთვის, მასტერს უნდა ჰქონდეს 10 ცალკე ფეხი CS-სთან დასაკავშირებლად. არსებობს სხვა კავშირის ვარიანტი, რომელსაც ეწოდება daisy-chain. ამ კავშირით, ყველა მოწყობილობა დაკავშირებულია ჯაჭვში და აქვს ერთი საერთო CS. ჩართვის ეს მეთოდი დეტალურად არ იქნება განხილული, იმის გამო, რომ იგი საკმაოდ იშვიათად გამოიყენება. როგორც ზემოთ აღვნიშნეთ, ერთსა და იმავე ავტობუსს შეიძლება დაუკავშირდეს სხვადასხვა სლავური მოწყობილობა, ზოგიერთი მათგანი საკმაოდ სწრაფია და შეუძლია მონაცემთა გაცვლა მასტერთან დიდი სიჩქარით, ზოგი კი პირიქით, ძალიან ნელია. ეს ნიშნავს, რომ მასტერმა არ უნდა შექმნას საათის იმპულსები ძალიან სწრაფად, წინააღმდეგ შემთხვევაში ნელი სლავური მოწყობილობები ვერ გაიგებენ მას მონაცემთა დაზიანების გამო. თუმცა, სიჩქარე არ არის SPI ინტერფეისის ყველა პარამეტრი, ასევე არსებობს 4 SPI რეჟიმი. მე შევამჩნიე, რომ SPI ინტერფეისის მქონე ნებისმიერი მოწყობილობის მონაცემთა ცხრილებში ჩვეულებრივ წერენ „ეს მოწყობილობა იყენებს რეჟიმს 2“. ვერ ვიტყვი რამდენად სტანდარტიზებულია ეს, მაგრამ რამდენჯერმე მინახავს. მოკლედ რომ აღვწეროთ ამ რეჟიმების არსი, თითოეული მათგანი განსაზღვრავს რა მომენტში (დამოკიდებულია SCK ხაზის მდგომარეობაზე) მონაცემების წაკითხვა/გადაცემა. შემდეგი ცხრილი გვიჩვენებს, თუ რა არის ეს რეჟიმები და როგორ განსხვავდებიან ისინი ერთმანეთისგან. ოთხივე რეჟიმში, მასტერი აგზავნის ერთსა და იმავე ბაიტს (0x93). ყვითელი ხაზი არის SCK და ლურჯი ხაზი არის MOSI.

რეჟიმიCPOLCPHAოსცილოგრამარეჟიმის აღწერა
0 0 0 სინჯის აღება წინა ამომავალ კიდეზე
1 0 1 სინჯის აღება მიმავალი დავარდნილ კიდეზე
2 1 0 სინჯის აღება წინა დავარდნილ კიდეზე
3 1 1 სინჯის აღება უკნიდან ამომავალ კიდეზე

როგორც ცხრილიდან ჩანს, რეჟიმის ნომერი შედგება ორი ბიტისაგან - CPOLდა CPHA. ცოტა CPOLგანსაზღვრავს რა მდგომარეობაში იქნება SCL ფეხი, სანამ არაფერი არ არის გადაცემული. თუ CPOL=0 მაშინ უმოქმედო რეჟიმში ფეხი დაბალ ლოგიკურ დონეზეა. ეს ნიშნავს, რომ წინა კიდე ჩაითვლება გადასვლად 0-დან 1-მდე (და ჩამოვარდნილი კიდე, შესაბამისად, პირიქით, 1-დან 0-მდე). თუ CPOL=1 მაშინ უმოქმედო რეჟიმში ლოგიკური დონე მაღალია. ეს ნიშნავს, რომ წინა კიდე ჩაითვლება გადასვლად 1-დან 0-მდე (და ჩამოვარდნილი კიდე, შესაბამისად, პირიქით, 0-დან 1-მდე). ცოტა CPHAადგენს, რომელ კიდეზე უნდა მოხდეს სინჯის აღება: 0 – წინა კიდეზე, 1 – ჩამოვარდნილ კიდეზე. სინამდვილეში, ეს არის ყველაფერი, რასაც ზემოთ მოცემული ცხრილი აჩვენებს. სხვათა შორის, აღსანიშნავია, რომ ამ ორ ბიტს STM32 და AVR მიკროკონტროლერების SPI კონფიგურაციის რეესტრში ზუსტად იგივე ეწოდება. შემდეგი მნიშვნელოვანი პარამეტრი არის ბიტების თანმიმდევრობა. ჩვეულებრივ, ყველაზე მნიშვნელოვანი ბიტი პირველ რიგში გადადის, მაგრამ ზოგჯერ პირიქით ხდება, თუ ეს არ იქნება გათვალისწინებული, მონა და ბატონი ვერ იპოვიან საერთო ენას. ბიტების რაოდენობა შეიძლება განსხვავდებოდეს, ჩვეულებრივ ეს არის 8 ბიტი, ზოგჯერ მეტი. თეორიული საფუძვლები დასრულდა. შემდეგ სტატიაში შევეცდებით SPI დაფაზე მივიღოთ

SPI ინტერფეისი შეიქმნა Motorola-ს მიერ. დღეს ის არის ერთ-ერთი ყველაზე პოპულარული, მაღალი სიჩქარისა და განსაკუთრებული სიმარტივის გამო, ყველა თანმიმდევრული ტიპის. გარდა ამისა, SPI ინტერფეისი ასევე კომუნიკაციის პრინციპია. არსებითად, SPI არის ლოგიკა (მასტერ-მონა) ორ სხვადასხვა მოწყობილობას შორის. გაცილებით ნაკლები ყურადღება ეთმობა ფიზიკურ თვისებებს, როგორც ამბობენ, „გარემოების მიხედვით“ და არ არის გათვალისწინებული ქვედა დონის პროტოკოლი. თითოეულ მწარმოებელს შეუძლია საკუთარი წვლილი შეიტანოს.

SPI ინტერფეისი: აღწერა

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

მოწყობილობის მუშაობის აღწერა

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

- MOSI - ძირითადი გამომავალი და slave შეყვანა. ეს ხაზი გადადის ძირითადი მოწყობილობიდან მიმღებ მოწყობილობამდე.

MISO - ძირითადი შეყვანა და სლავური გამომავალი. ამ მავთულის მეშვეობით ოსტატი იღებს მონაცემებს დამხმარე მოწყობილობიდან.

SCLK - საათის ავტობუსი. ამ ხაზის გასწვრივ, "სამაგისტრო" მოწყობილობა წარმოქმნის საათის იმპულსებს.

SS - "მონის" შერჩევა. ამ მავთულის გამოყენებით, ოსტატი აკონტროლებს გაცვლის სესიას.

ლოგიკური ნული და ერთი დონეები კოდირებულია მონაცემთა ავტობუსზე ძაბვის მნიშვნელობით (MISO და MOSI). SS სიგნალი მიუთითებს ინფორმაციის გაცვლის სესიის დასასრულს და დასაწყისს. ყველაზე ხშირად ის ინვერსიულია. ეს ნიშნავს, რომ მონაცემთა გაცვლის დროს „მასტერმა“ მოწყობილობამ უნდა დააყენოს SS ხაზი დაბალი დონის სიგნალზე, ხოლო გაცვლის ბოლოს მაღალ დონეზე. SS დონის არსებობა საშუალებას გაძლევთ მოაწყოთ გადაცემა რამდენიმე "მონურ" მოწყობილობაზე ერთი საათის სიგნალის და ერთი მონაცემთა ავტობუსის გამოყენებით დამატებითი პროტოკოლების გარეშე. თუმცა, ასეთი კავშირით აუცილებელია თითოეული მიმღები მოწყობილობიდან ცალკე SS ხაზის დაკავშირება.

Კარგი დღე! დღევანდელი სტატია არის მცირე თეორიული გადახრა, რომელიც დაგვეხმარება Arduino პროგრამირების კურსის დაუფლებაში. ჩვენ ვისაუბრებთ SPI ინტერფეისზე. რა არის და რითი მიირთმევენ, ამ სტატიაში შევეცდებით გავერკვეთ.

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

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

SPI მონაცემთა ავტობუსის pinoutშედგება 4 ხაზისგან: MOSI, MISO, CS და SCLK:

  • MOSI(Master Out Slave In - Master-output, Slave-input) ან უბრალოდ ს.ი.– მონაცემთა გადაცემა ხდება ძირითადი მოწყობილობიდან სლავ მოწყობილობაზე.
  • MISO(Master In Slave Out - Master-input, Slave-output) ან უბრალოდ ᲘᲡᲔ- მონაცემთა გადაცემა ხდება slave მოწყობილობიდან მთავარ მოწყობილობაზე.
  • C.S.(Chip Select - ჩიპის შერჩევა) ან SS(Slave Select — მონების შერჩევა) – სლავური მოწყობილობის შერჩევა.
  • SCLK(სერიული საათი) ან უბრალოდ SCK– საათის სიგნალის გადაცემა ბატონიდან მონაზე.

მონაცემთა master-დან slave-ზე გადასატანად, აუცილებელია, რომ მასტერმა დააყენოს სიგნალის დონე დაბალ სლავის CS ხაზზე, რომელთანაც აპირებს კომუნიკაციის დამყარებას. შემდეგ ბიტები გადაეცემა MOSI ხაზს. მონაცემთა გადაცემის შესაჩერებლად, ლიდერი "ათავისუფლებს" CS ხაზს, როგორც ეს იყო, აყენებს მასზე სიგნალის მაღალ დონეს.

SPI მონაცემთა ავტობუსთან რამდენიმე slave მოწყობილობის დასაკავშირებლად, თითოეულ მათგანს უნდა ჰქონდეს საკუთარი ინდივიდუალური CS ხაზი. მას შემდეგ, რაც ეს გაკეთდება, მთავარ მოწყობილობას შეუძლია მონაცვლეობით "გაიყვანოს" ხაზები, გადართვის სლავ მოწყობილობებს შორის. მრავალი მონა შეიძლება დაკავშირებული იყოს სხვადასხვა გზით: პარალელურად ან სერიულად.

Slave მოწყობილობების პარალელური კავშირი SPI მონაცემთა ავტობუსით

რამდენიმე slave მოწყობილობის პარალელური კავშირის თავისებურება ის არის, რომ საერთო ხაზები SCLK, MOSI და MISO გამოიყენება კომუნიკაციის შესაქმნელად. ამ შემთხვევაში, თითოეულ slave მოწყობილობას აქვს საკუთარი SS(CS) ხაზი. სამაგისტრო მოწყობილობა განსაზღვრავს რომელ „მიმდინარე მონასთან“ დაამყაროს მონაცემთა გაცვლა შესაბამისი SSn ხაზზე დაბალი სიგნალის დონის წარმოქმნით (სადაც n – 1,2...).

SPI ინტერფეისის მეშვეობით სლავური მოწყობილობების n-ნომრის დასაკავშირებლად კონტროლერთან, თქვენ უნდა გამოყოთ ისინი ამ მიზნით. n+3მიკროკონტროლერის ქინძისთავები.

Slave მოწყობილობების სერიული კავშირი SPI ავტობუსთან

რაც შეეხება სლავური მოწყობილობების სერიულ კავშირს, ისინი იყენებენ საერთო ხაზებს SCLK და SS, ხოლო ერთის გამომავალი უკავშირდება მეორის შეყვანას. Master-ის MOSI ხაზი უკავშირდება პირველ მონას, ხოლო MISO ხაზი უკავშირდება ბოლოს. თუ ამ კავშირს უყურებთ ძირითადი მოწყობილობის თვალსაზრისით, მაშინ ერთი slave მოწყობილობა დაკავშირებულია SPI მონაცემთა ავტობუსით.

გასათვალისწინებელია ამ ტიპის კავშირის უპირატესობა: შეგიძლიათ დააკავშიროთ n-ე ნომერი მოწყობილობები ამ მიზნით მიკროკონტროლერის მხოლოდ 4 ქინძის გამოყენებით.

ჯერჯერობით სულ ესაა, გაგრძელება...

SPI Arduino-ში ეს არის ერთ-ერთი მთავარი პროტოკოლი Arduino-ს დაფასა და დაკავშირებულ მოწყობილობებს შორის მონაცემთა გაცვლისთვის. I2C-თან და UART-თან ერთად ეს პროტოკოლი ხშირად გამოიყენება მრავალი ტიპის პერიფერიული მოწყობილობებისთვის, ამიტომ SPI მუშაობის პრინციპების ცოდნა აუცილებელია Arduino-ს ნებისმიერი ინჟინრისთვის. ამ სტატიაში მოკლედ განვიხილავთ SPI სენსორებისა და ეკრანების Arduino-სთან დაკავშირების ძირითად პრინციპებს, ურთიერთქმედების სქემას და მეთოდს.

SPI არის ფართოდ გამოყენებული მონაცემთა გადაცემის პროტოკოლი მიკროკონტროლერს (Master) და პერიფერულ მოწყობილობებს (Slave) შორის. ჩვენს პროექტებში Arduino დაფა ყველაზე ხშირად გამოიყენება როგორც Master. SPI ინტერფეისი გამოიგონა და გამოიყენა Motorola-მ, მაგრამ დროთა განმავლობაში ის გახდა ინდუსტრიის სტანდარტი. ამ ინტერფეისთან მუშაობის მთავარი უპირატესობა მისი მაღალი სიჩქარე და მონაცემთა ერთ ავტობუსზე რამდენიმე მოწყობილობის დაკავშირების შესაძლებლობაა.

SPI ქინძისთავები და ქინძისთავები

SPI arduino ინტერფეისის საშუალებით კომუნიკაცია ხდება რამდენიმე მოწყობილობას შორის, რომლებიც მდებარეობს ერთმანეთთან ახლოს. Arduino დაფები აღჭურვილია SPI-სთვის ცალკე ქინძისთავებით. დაწყვილება ხდება ოთხი კონტაქტის გამოყენებით:

  • MOSI - ინფორმაცია ამ ხაზის მეშვეობით გადაეცემა Slave-ს Master-ისგან.
  • MISO – გამოიყენება სლავიდან ოსტატზე ინფორმაციის გადასაცემად.
  • SCLK - საათის იმპულსების შექმნა მონაცემთა სინქრონული გადაცემისთვის.
  • SS - slave მოწყობილობის შერჩევა.

SPI მოწყობილობების ურთიერთქმედება

მოწყობილობის ურთიერთქმედება იწყება, როდესაც SS გამომავალი დაბალია.

მუშაობის დაწყებამდე თქვენ უნდა განსაზღვროთ:

  • რომელი ბიტიდან უნდა დაიწყოს ცვლა - მაღალი თუ დაბალი? შეკვეთის კორექტირება ხდება PI.setBitOrder() ფუნქციის გამოყენებით.
  • განსაზღვრეთ დონე, რომელზეც უნდა იყოს SCK ხაზი საათის პულსის არარსებობის შემთხვევაში. რეგულირებადი SPI.setDataMode() ფუნქციით.
  • აირჩიეთ მონაცემთა გადაცემის სიჩქარე. განისაზღვრება SPI.setClockDivider() ფუნქციით.

შემდეგი ნაბიჯი არის იმის დადგენა, თუ რა რეჟიმში მოხდება ინფორმაციის გადაცემა. რეჟიმის არჩევანი განისაზღვრება ისეთი ინდიკატორებით, როგორიცაა საათის პულსის პოლარობა და ფაზა. თუ დონე დაბალია, იწერება 0, მაღალი - 1. სულ არის 4 რეჟიმი:

  • რეჟიმი 0 – SPI_MODE0: პოლარობა (CPOL) 0, ფაზა (CPHA) 0.
  • რეჟიმი 1: პოლარობა 0, ფაზა 1.
  • რეჟიმი 2: პოლარობა 1, ფაზა 0.
  • რეჟიმი 3: პოლარობა 1, ფაზა 1.

თავდაპირველად, Arduino შეიქმნა იმისათვის, რომ გადასცეს მონაცემები პირველ რიგში ყველაზე მნიშვნელოვანი ბიტით, მაგრამ დაწყებამდე, თქვენ უნდა დააზუსტოთ ეს დოკუმენტაციაში. თქვენ შეგიძლიათ აჩვენოთ რეჟიმები სურათზე.

SPI ინტერფეისში შესაძლებელია ორი ტიპის კავშირი: დამოუკიდებელი და კასკადური. პირველ შემთხვევაში, დაკავშირებისას Master მიმართავს თითოეულ Slave-ს ინდივიდუალურად, მეორე შემთხვევაში კავშირი ხდება სათითაოდ, ე.ი. კასკადი.

SPI დაკავშირება Arduino-სთან

Arduino-ს თითოეულ მოდელს აქვს საკუთარი SPI ქინძისთავები. ეს დასკვნები:

  • Uno: MOSI შეესაბამება pin 11 ან ICSP-4, MISO - 12 ან ICSP-1, SCK - 13 ან ICSP-3, SS (slave) - 10.
  • Mega1280 ან Mega2560: MOSI – 51 ან ICSP-4, MISO – 50 ან ICSP-1, SCK – 52 ან ICSP-3, SS (slave) – 53.
  • ლეონარდო: MOSI – ICSP-4, MISO – ICSP-1, SCK – ICSP-3.
  • გადასახდელი: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (მასტერი) – 4, 10, 52.

Arduino Due-ის უახლესი კონტროლერი აფართოებს მომხმარებლის შესაძლებლობებს და საშუალებას გაძლევთ განახორციელოთ მეტი დავალება, ვიდრე სხვა მიკროკონტროლერები. მაგალითად, შესაძლებელია slave მოწყობილობის ავტომატურად მართვა და სხვადასხვა კონფიგურაციის ავტომატურად შერჩევა (საათის სიჩქარე, რეჟიმი და ა.შ.).

Arduino SPI ბიბლიოთეკა

Arduino-ზე მუშაობისთვის შეიქმნა ცალკე ბიბლიოთეკა, რომელიც ახორციელებს SPI-ს. კოდის დაწყებამდე თქვენ უნდა დაამატოთ #include ბიბლიოთეკის გასააქტიურებლად.

ძირითადი ფუნქციები:

  • start() და end() – ჩართეთ და გამორთეთ სამუშაო. ინიციალიზაციის დროს, SCLK, MOSI და SS ხაზები კონფიგურირებულია გამოსავალზე, აგზავნის დაბალ დონეს SCLK-ს, MOSI-ს და მაღალ დონეს SS-ს. end() ფუნქცია არ ცვლის ხაზების დონეებს, ის საჭიროა Arduino დაფაზე ინტერფეისთან დაკავშირებული ბლოკის გამორთვის.
  • setBitOrder(order) – საინფორმაციო ბიტების გაგზავნის თანმიმდევრობის დაყენება (MSBFIRST – ყველაზე მნიშვნელოვანი ბიტის პრიორიტეტი, LSBFIRST – ყველაზე ნაკლებად მნიშვნელოვანი ბიტის პრიორიტეტი).
  • setClockDivider(divider) – ძირითადი სიხშირის საათის გამყოფების დაყენება. შეგიძლიათ დააყენოთ 2, 4, 8, 16, 32, 64 და 128-ის გამყოფები. იწერება ასე - SPI_CLOCK_DIVn, სადაც n არის არჩეული გამყოფი.
  • setDataMode(რეჟიმი) – აირჩიეთ ოთხი ოპერაციული რეჟიმიდან ერთ-ერთი.
  • transfer(value) – გადასცემს ბაიტს ძირითადი მოწყობილობიდან და აბრუნებს ბაიტს, რომელიც მიღებულ იქნა slave მოწყობილობიდან.
  • shiftIn(miso_pin, sclk_pin, bit_order) და shiftOut (mosi_pin, sclk_pin, order, value) – მონაცემების მიღება და გაგზავნა, შეიძლება დაკავშირებული იყოს ნებისმიერ ციფრულ პინთან, მაგრამ მანამდე თქვენ თავად უნდა დააკონფიგურიროთ ისინი.

SPI-ს უპირატესობები და უარყოფითი მხარეები

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

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

ხარვეზები:

  • ქინძისთავების დიდი რაოდენობა I2C-თან შედარებით.
  • მონა ვერ აკონტროლებს ინფორმაციის ნაკადს.
  • სტანდარტული შეცდომების გამოვლენის პროტოკოლის არარსებობა.
  • ინტერფეისის განხორციელების უამრავი გზა.
  • ინფორმაციის მიღების დადასტურების არარსებობა.

Arduino SPI-ის გამოყენების მაგალითი პროექტში წნევის სენსორით

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

SCP1000 სენსორის გამოყენებით შესაძლებელია ისეთი პარამეტრების ამოცნობა, როგორიცაა წნევა და ტემპერატურა და ამ მნიშვნელობების გადაცემა SPI-ის საშუალებით.

პროგრამის ესკიზის ძირითადი ელემენტები

უპირველეს ყოვლისა, სენსორის რეგისტრები რეგისტრირდება კოდში setup() გამოყენებით. მოწყობილობიდან ბრუნდება რამდენიმე მნიშვნელობა - ერთი 19 ბიტიდან მიღებული წნევისთვის, მეორე 16 ბიტში ტემპერატურისთვის. ამის შემდეგ, ორი ტემპერატურის ბაიტი იკითხება და წნევა იკითხება ორ ეტაპად. ჯერ პროგრამა იღებს სამ ყველაზე მნიშვნელოვან ბიტს, შემდეგ შემდეგ 16 ბიტს, რის შემდეგაც, ბიტის ცვლის გამოყენებით, ეს ორი მნიშვნელობა გაერთიანებულია ერთში. რეალური წნევა არის 19-ნიშნა მნიშვნელობა გაყოფილი 4-ზე.

const int PRESSURE = 0x1F; // წნევის განსაზღვრის პირველი ეტაპი (გამოვლენილია სამი ყველაზე მნიშვნელოვანი ბიტი)

const int PRESSURE_LSB = 0x20; // მეორე ეტაპი, რომელიც განსაზღვრავს 16 ბიტს წნევისთვის

const int TEMPERATURE = 0x21; //16 ბიტი ტემპერატურისთვის

ტემპერატურის მონაცემების წასაკითხად და ცელსიუსზე გადასაყვანად გამოიყენება შემდეგი კოდის ელემენტი:

int tempData = readRegister(0x21, 2);

float realTemp = (float)tempData / 20.0; // ცელსიუსში რეალური ტემპერატურის მნიშვნელობის დასადგენად, მიღებული რიცხვი უნდა გაყოთ 20-ზე

Serial.print („ტემპერ

Serial.print (realTemp);

წნევის ბიტების წაკითხვა და მათი გაერთიანება:

ბაიტის წნევა_მონაცემების_მაღალი = წაკითხვარეგისტრაცია(0x1F, 1);

წნევა_მონაცემები_მაღალი &= 0b00000111;

ხელმოუწერელი int press_data_low = readRegister(0x20, 2);

ხანგრძლივი წნევა = ((წნევა_მონაცემები_მაღალი<< 16) | pressure_data_low) / 4; //определение давления в Паскалях.

მოკლე დასკვნები SPI-ის შესახებ

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

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

ნახ.1 სტანდარტული კომუნიკაცია SPI-ით

საბურავში SPIგამოიყენება 4 ციფრული სიგნალი:
  • MOSI: (Master Out Slave In) ძირითადი გამომავალი, slave შეყვანა.
  • MISO: (Master In Slave Out) სამაგისტრო შეყვანა, მონა გამომავალი.
  • SCLK: (სერიული საათი) საათის სიგნალი.
  • C.S.ან SS: (Chip Select, Slave Select) ჩიპის შერჩევა, მონების შერჩევა.

სხვა სახელები შესაძლებელია:

  • MOSI: SIMO, SDO, DO, DOUT, SI, MTSR;
  • MISO: SOMI, SDI, DI, DIN, SO, MRST;
  • SCLK: SCK, CLK;
  • SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.
საბურავი SPIშეუძლია 1 სამაგისტრო და რამდენიმე სლავ მოწყობილობით მუშაობა. თუ გამოიყენება ერთი slave მოწყობილობა, მისი SS შეყვანა შეიძლება დამიწდეს, მაგრამ მხოლოდ იმ შემთხვევაში, თუ ის არ მუშაობს სიგნალის გათიშვაზე.

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

თუ არ არის ბუფერი გათვალისწინებული მოწყობილობების შიგნით, მაშინ ხაზი MISOყოველთვის იქნება log.0 ან log.1 მდგომარეობაში. (მას ასევე შეუძლია დაწვა). იმის შესამოწმებლად, არის თუ არა ბუფერი ჩვენს მოწყობილობაში, შეგიძლიათ წაიკითხოთ დოკუმენტაცია ან დააკავშიროთ ძაბვის გამყოფი ისე, რომ ხაზზე MISOიყო მიწოდების ძაბვის ნახევარი, შემდეგ გაზომეთ რეალური ძაბვა. თუ ჩვენ მიერ გაზომილი მნიშვნელობა განსხვავებულია (ეს იქნება 0 V ან მიწოდების ძაბვა), მაშინ ბუფერი არ არის და ის ცალკე ჩიპად უნდა დამონტაჟდეს.


ნახ.3 შიდა ბუფერის არსებობის შემოწმება

მონაცემთა გადაცემა


Master და Slave მონაცემებს ერთდროულად გადასცემენ ერთმანეთს. პირველ რიგში, თქვენ უნდა აირჩიოთ slave მოწყობილობა მისი შეყვანის დაყენებით SSდაბალი ლოგიკური დონე (შეიძლება განსხვავდებოდეს მწარმოებლის მიხედვით). გადასაცემი მონაცემები მოთავსებულია ცვლის რეესტრებში. შემდეგ მასტერი წარმოქმნის საათის სიგნალებს დაახლოებით რამდენიმე მეგაჰერცის სიხშირით, მასტერი და მონა იწყებენ ერთმანეთის გაგზავნას ცვლის რეგისტრებში შენახული ინფორმაციის ნაწილ-ნაწილ, დაწყებული ყველაზე მნიშვნელოვანი ბიტით.

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

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

რამდენიმე რეგისტრი გამოიყენება ინტერფეისის კონფიგურაციისთვის. თქვენ შეგიძლიათ დაარეგულიროთ სიხშირე, შეფერხებები, ბიტების რიგი და მრავალი სხვა, ამის შესახებ მეტი ინფორმაცია შეგიძლიათ იხილოთ დოკუმენტაციაში Motorola ee.nmt.edu-დან, ეს დოკუმენტი აღებულია როგორც სტანდარტი. SPI. მაგრამ მწარმოებლებმა შეიძლება არ გამოიყენონ იქ აღწერილი ყველა პარამეტრი და ბიტები შეიძლება განლაგდეს Motorola-ს აღწერილობისგან განსხვავებული თანმიმდევრობით. ნებისმიერ შემთხვევაში, თქვენ უნდა წაიკითხოთ დოკუმენტაცია კონკრეტული მოწყობილობისთვის.

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

ძირითადად, ამ პარამეტრების გაგება შესაძლებელია დროის დიაგრამიდან:

  • CPOL= 0: სინქრონიზაციის სიგნალი იწყება დაბალი;
  • CPOL= 1: სინქრონიზაციის სიგნალი იწყება მაღალი;
  • CPHA= 0: მონაცემები იწერება საათის სიგნალის ამომავალ კიდეზე;
  • CPHA= 1: მონაცემები ჩაიწერება საათის სიგნალის დაცემის კიდეზე.
დაცემა და წინა კიდეები მიუთითებს საათის სიგნალის პირველ ცვლილებაზე, ან მეორეზე. ეს არ არის დამოკიდებული იმაზე, თუ რა მდგომარეობაში მიდის ხაზი SCK, ეს შეიძლება იყოს დაცემა ან აწევა.

ბიტების მდგომარეობიდან გამომდინარე CPHAდა CPOL, არსებობს SPI ინტერფეისის 4 ოპერაციული რეჟიმი (0, 1, 2 ან 3). მაგრამ მწარმოებლის მიხედვით, ისინი ხშირად შეესაბამება სხვადასხვა ბიტის მდგომარეობას, მაგალითად, ARM და PIC32MX კონტროლერებისთვის, არცერთი რეჟიმი არ ემთხვევა.

არსებობს 2 პოპულარული გზა მრავალი SPI-ის ჩართვისთვის, რომელთაგან პირველი არის ჯაჭვის კავშირი:

ამ შემთხვევაში, ოსტატი ირჩევს, თუ რომელი სლავური მოწყობილობა უნდა გადასცეს მონაცემებს.

შესაძლოა, slave მოწყობილობები არ იყოს თავსებადი ერთმანეთთან და მათ სჭირდებათ სხვადასხვა პარამეტრები, მაგალითად, სხვადასხვა პაკეტის სიგრძე, ამ შემთხვევაში ისინი იყენებენ "ring" კავშირს:

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

დასკვნა


SPIინტერფეისმა მოიპოვა პოპულარობა მისი სიმარტივისა და დაბალი ღირებულების გამო. ახლა მისი ნახვა შესაძლებელია უამრავ მოწყობილობაში, რომლებიც დაპროგრამებულია მისი დახმარებით, JTAG ასევე ხორციელდება SPI.მას ხშირად იყენებენ სხვადასხვა მიკროსქემებთან კომუნიკაციისთვის: ფლეშ მეხსიერება, EEPROM, LCD, SD ბარათები, ADC, DAC მიკროსქემები და მრავალი სხვა.

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

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

უპირატესობები

  • სრული დუპლექსის მონაცემთა გადაცემა.
  • უფრო მაღალი გამტარუნარიანობა I²C-თან ან SMBus-თან შედარებით.
  • პაკეტის სიგრძის თვითნებური შერჩევის შესაძლებლობა.
  • დაბალი ენერგიის მოხმარების მოთხოვნები I²C და SMBus-თან შედარებით;
  • შეიძლება გამოყენებულ იქნას სისტემებში დაბალი სტაბილური საათის სიჩქარით;
  • Slave მოწყობილობებს არ სჭირდებათ უნიკალური მისამართი, განსხვავებით ინტერფეისებისგან, როგორიცაა I²C, GPIB ან SCSI.
  • გამოიყენება მხოლოდ ოთხი პინი, რაც გაცილებით ნაკლებია, ვიდრე პარალელური ინტერფეისებისთვის.
  • სიგნალების ცალმხრივი ბუნება საშუალებას იძლევა, საჭიროების შემთხვევაში, ადვილად მოაწყოს გალვანური იზოლაცია მთავარ და სლავ მოწყობილობებს შორის.
  • მაქსიმალური საათის სიხშირე შემოიფარგლება მხოლოდ მონაცემთა გაცვლაში ჩართული მოწყობილობების სიჩქარით.

ხარვეზები

  • მეტი ქინძისთავია საჭირო, ვიდრე I²C ინტერფეისისთვის.
  • Slave მოწყობილობა ვერ აკონტროლებს მონაცემთა ნაკადს.
  • არ არსებობს მონაცემების მიღების დადასტურება slave მოწყობილობიდან (მასტერ მოწყობილობას შეუძლია მონაცემების გადაცემა „არსად“).
  • არ არსებობს სტანდარტულად განსაზღვრული შეცდომის გამოვლენის პროტოკოლი.
  • ოფიციალური სტანდარტის არარსებობა შეუძლებელს ხდის მოწყობილობების სერტიფიცირებას.
  • მონაცემთა გადაცემის დიაპაზონის თვალსაზრისით, SPI ინტერფეისი ჩამორჩება სტანდარტებს, როგორიცაა UART და CAN.
  • ინტერფეისის განხორციელების მრავალი ვარიანტის ხელმისაწვდომობა.
  • მოწყობილობების ცხელი ჩართვის მხარდაჭერის ნაკლებობა.

წყაროები:
დოკუმენტაცია Motorola-სგან



გაქვთ შეკითხვები?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: