หลักสูตรการฝึกอบรม AVR การทำงานกับโมดูล SPI การอ่านและการเขียนข้อมูล Ch2 วิธีทำงานกับ SPI - อินพุต Theory Spi

ถ่ายโอนอินเทอร์เฟซ

อินเทอร์เฟซการถ่ายโอนข้อมูลจำนวนมากได้รับการพัฒนาเพื่อถ่ายโอนข้อมูลจากอุปกรณ์หนึ่งไปยังอีกเครื่องหนึ่งหรือจากชิปตัวหนึ่งไปยังอีกเครื่องหนึ่ง แต่ละอินเทอร์เฟซมีทั้งด้านบวกและด้านลบ ดังนั้นคุณจึงจำเป็นต้องทราบว่ามีอินเทอร์เฟซใดบ้าง ข้อดีและข้อเสีย และใช้อินเทอร์เฟซที่เหมาะสมเพื่อถ่ายโอนข้อมูลในสถานการณ์ที่กำหนด

อินเทอร์เฟซมาพร้อมกับการถ่ายโอนข้อมูลแบบอะซิงโครนัสและซิงโครนัส ด้วยการส่งข้อมูลแบบซิงโครนัส สัญญาณนาฬิกาจะถูกส่งไปพร้อมกับข้อมูล ทำให้เครื่องรับและเครื่องส่งสัญญาณซิงโครไนซ์ได้ ตัวอย่างของโปรโตคอลดังกล่าวคืออินเทอร์เฟซ SPI

ในการส่งข้อมูลแบบอะซิงโครนัสจะไม่มีสัญญาณนาฬิกา ในบรรทัดดังกล่าว อาจมีความเสี่ยงจากความไม่ตรงกันระหว่างเครื่องรับและเครื่องส่งสัญญาณ ซึ่งส่งผลให้ไม่สามารถรับข้อมูลเพิ่มเติมได้อย่างถูกต้อง เพื่อป้องกันสิ่งนี้ อินเทอร์เฟซแบบอะซิงโครนัสจะทำการซิงโครไนซ์เป็นระยะตามสายข้อมูล ข้อดีของอินเทอร์เฟซดังกล่าวคือจำนวนตัวนำน้อยกว่าที่จำเป็นสำหรับการส่งสัญญาณ

มาดูอินเทอร์เฟซยอดนิยมหลายๆ อินเทอร์เฟซให้ละเอียดยิ่งขึ้น

อินเตอร์เฟซ USART

อินเทอร์เฟซ USART เป็นตัวรับส่งสัญญาณซิงโครนัสแบบอะซิงโครนัสสากลแบบอนุกรม ข้อมูลจะถูกถ่ายโอนไปยัง USART เป็นระยะๆ ช่วงเวลานี้กำหนดโดยความเร็ว USART ที่ระบุและระบุเป็นบอด (สำหรับอักขระที่สามารถรับค่าได้เท่ากับศูนย์หรือหนึ่งเท่านั้น บอดจะเท่ากับบิตต่อวินาที) มีช่วงความเร็วมาตรฐานที่ยอมรับโดยทั่วไป: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 baud

นอกเหนือจากบิตข้อมูลแล้ว USART ยังแทรกเครื่องหมายการซิงโครไนซ์ลงในสตรีมโดยอัตโนมัติ ซึ่งเรียกว่าบิตเริ่มต้นและหยุด เมื่อได้รับแล้ว บิตพิเศษเหล่านี้จะถูกลบออก โดยทั่วไปแล้ว บิตเริ่มต้นและหยุดจะแยกข้อมูลหนึ่งไบต์ (8 บิต) แต่มีการใช้งาน USART ที่อนุญาตให้ส่ง 5, 6, 7, 8 หรือ 9 บิต บิตที่คั่นด้วยสัญญาณเริ่มต้นและหยุดคือการส่งขั้นต่ำ USART ช่วยให้คุณสามารถแทรกบิตหยุดสองบิตระหว่างการส่งสัญญาณ เพื่อลดโอกาสที่เครื่องรับและตัวส่งสัญญาณจะเกิดการไม่ซิงโครไนซ์ในการจราจรหนาแน่น เครื่องรับจะละเว้นบิตหยุดที่สอง โดยถือว่าเป็นการหยุดชั่วคราวบนเส้น

แบบแผนคือสถานะพาสซีฟ (ในกรณีที่ไม่มีข้อมูล) ของอินพุตและเอาต์พุต USART นั้นเป็นตรรกะ "1" บิตเริ่มต้นจะเป็นตรรกะ "0" เสมอ ดังนั้นตัวรับ USART จะรอการเปลี่ยนจาก "1" เป็น "0" และนับจากนั้นเป็นช่วงเวลาครึ่งหนึ่งของระยะเวลาของบิต (ตรงกลางของการส่งบิตเริ่มต้น) . หากในขณะนี้อินพุตยังคงเป็น "0" แสดงว่ากระบวนการรับพัสดุขั้นต่ำเริ่มต้นขึ้น ในการดำเนินการนี้ ผู้รับจะนับระยะเวลา 9 บิตติดต่อกัน (สำหรับข้อมูล 8 บิต) และบันทึกสถานะอินพุตในแต่ละช่วงเวลา ข้อมูลที่ได้รับ 8 ค่าแรก ค่าสุดท้ายคือค่าทดสอบ (บิตหยุด) ค่าบิตหยุดจะเป็น "1" เสมอ หากค่าที่ได้รับจริงแตกต่าง USART จะบันทึกข้อผิดพลาด

ในการสร้างช่วงเวลา USART ที่ส่งและรับจะมีแหล่งที่มาของเวลาที่แม่นยำ (การตอกบัตร) ความถูกต้องของแหล่งที่มานี้ต้องทำให้ผลรวมของข้อผิดพลาด (ตัวรับและตัวส่ง) ในการตั้งค่าช่วงเวลาตั้งแต่เริ่มต้นพัลส์เริ่มต้นจนถึงกึ่งกลางของพัลส์หยุดไม่เกินครึ่งหนึ่ง (หรือดีกว่า อย่างน้อย a ไตรมาส) ของช่วงบิต สำหรับข้อความ 8 บิต 0.5/9.5 = 5% (ในความเป็นจริงไม่เกิน 3%) เนื่องจากนี่คือผลรวมของข้อผิดพลาดของเครื่องรับและเครื่องส่งบวกกับการบิดเบือนสัญญาณที่เป็นไปได้ในสาย ค่าเผื่อที่แนะนำสำหรับความแม่นยำในการตอกบัตรของ USART คือไม่เกิน 1.5%

เนื่องจากบิตนาฬิกาครอบครองส่วนหนึ่งของบิตสตรีม ผลลัพธ์ของ UART จึงไม่เท่ากับความเร็วในการเชื่อมต่อ ตัวอย่างเช่น สำหรับการส่งสัญญาณในรูปแบบ 8 บิต 8-N-1 บิตนาฬิกาครอบครอง 20% ของสตรีม ซึ่งสำหรับความเร็วทางกายภาพที่ 115,200 บอด จะให้อัตราบิตข้อมูล 92,160 bps หรือ 11,520 ไบต์/วินาที

การตรวจสอบความเท่าเทียมกัน

โปรโตคอล USART มีความสามารถในการตรวจสอบความสมบูรณ์ของข้อมูลโดยอัตโนมัติโดยใช้วิธีพาริตีบิต เมื่อเปิดใช้งานคุณสมบัตินี้ บิตสุดท้ายของข้อมูล ("พาริตี้บิต") จะเป็น 1 หรือ 0 เสมอ ดังนั้นจำนวนในไบต์จึงเป็นเลขคู่เสมอ

การควบคุมการไหล

ในสมัยก่อน อุปกรณ์ USART อาจช้ามากจนไม่สามารถตามกระแสข้อมูลที่เข้ามาได้ เพื่อแก้ไขปัญหานี้ โมดูล USART จึงมีเอาต์พุตและอินพุตควบคุมการไหลแยกกัน เมื่อบัฟเฟอร์อินพุตเต็ม ตรรกะของ USART ที่รับจะตั้งค่าระดับการยับยั้งที่เอาต์พุตที่สอดคล้องกัน และ USART ที่ส่งสัญญาณจะระงับการส่งสัญญาณ ต่อมา การควบคุมการไหลถูกกำหนดให้กับโปรโตคอลการสื่อสาร และความจำเป็นในการแยกสายควบคุมการไหลก็ค่อยๆ หายไป

การใช้งานทางกายภาพ

USART เป็นโปรโตคอลการแลกเปลี่ยน เช่น จะกำหนดวิธีการสร้างบิต พารามิเตอร์การส่งไบต์ ความเร็วในการส่ง ฯลฯ

แต่การใช้งาน USART ทางกายภาพอาจแตกต่างกัน ตัวอย่างเช่น ในการส่งข้อมูลภายในบอร์ดเดียว สัญญาณจะถูกส่งไปที่ระดับ +5V และ 0V ในการถ่ายโอนข้อมูลในระยะทางไกลและระหว่างอุปกรณ์ จะใช้ระดับแรงดันไฟฟ้าและมาตรฐานทางกายภาพอื่นๆ เช่น กระแสลูป (4-20 mA), RS-232 (พอร์ต COM), RS-485 และอื่นๆ ในทำนองเดียวกัน

ในการแปลงระดับ "คอนโทรลเลอร์" 0-5V เป็นระดับ "มาตรฐาน" มีไมโครวงจรพิเศษจำนวนมากเช่น ADM202 สำหรับ RS-232

อินเทอร์เฟซแบบอนุกรม SPI

ชื่อ SPI เป็นตัวย่อของ "Serial Peripheral Bus" ซึ่งสะท้อนถึงจุดประสงค์ - บัสสำหรับเชื่อมต่ออุปกรณ์ภายนอก บัส SPI ถูกจัดระเบียบตามหลักการมาสเตอร์-สเลฟ โดยปกติแล้วบัสมาสเตอร์จะเป็นไมโครคอนโทรลเลอร์ แต่ก็อาจเป็นลอจิกที่ตั้งโปรแกรมได้ ตัวควบคุม DSP หรือ ASIC ก็ได้ อุปกรณ์ที่เชื่อมต่อกับอุปกรณ์หลักนั้นเป็นอุปกรณ์รอง บทบาทของพวกเขาเล่นโดยไมโครวงจรประเภทต่าง ๆ รวมถึง อุปกรณ์จัดเก็บข้อมูล (EEPROM, หน่วยความจำแฟลช, SRAM), นาฬิกาเรียลไทม์ (RTC), ADC/DAC, โพเทนชิโอมิเตอร์แบบดิจิทัล, ตัวควบคุมพิเศษ ฯลฯ

โครงสร้างหลักของอินเทอร์เฟซ SPI คือ shift register แบบเดิม ซึ่งการซิงโครไนซ์และสัญญาณอินพุต/เอาท์พุตบิตสตรีมจะสร้างสัญญาณอินเทอร์เฟซ ดังนั้นจึงถูกต้องกว่าที่จะเรียกโปรโตคอล SPI ไม่ใช่โปรโตคอลการถ่ายโอนข้อมูล แต่เป็นโปรโตคอลการแลกเปลี่ยนข้อมูลระหว่างรีจิสเตอร์กะสองตัวซึ่งแต่ละอันทำหน้าที่ทั้งฟังก์ชั่นของตัวรับและตัวส่งสัญญาณพร้อมกัน ข้อกำหนดเบื้องต้นสำหรับการส่งข้อมูลบนบัส SPI คือการสร้างสัญญาณการซิงโครไนซ์บัส มีเพียงผู้นำเท่านั้นที่มีสิทธิ์สร้างสัญญาณนี้ และงานของทาสก็ขึ้นอยู่กับมันโดยสมบูรณ์

การเชื่อมต่อ.

การเชื่อมต่อกับบัส SPI มีสามประเภท ซึ่งแต่ละประเภทเกี่ยวข้องกับสัญญาณสี่สัญญาณ วัตถุประสงค์ของสัญญาณ SPI อธิบายไว้ในตาราง 7.1

การเชื่อมต่อที่ง่ายที่สุดซึ่งเกี่ยวข้องกับไมโครวงจรเพียงสองวงจรจะแสดงในรูปที่ 7.2 ที่นี่ บัสมาสเตอร์จะส่งข้อมูลไปตามสาย MOSI พร้อมกันกับสัญญาณ SCLK ที่สร้างโดยมัน และสเลฟจะจับบิตข้อมูลที่ส่งบนขอบบางส่วนของสัญญาณซิงโครไนซ์ที่ได้รับ ในเวลาเดียวกัน สเลฟจะส่งแพ็คเกจข้อมูลของมัน วงจรที่นำเสนอสามารถทำให้ง่ายขึ้นได้โดยการกำจัดสาย MISO หาก IC ทาสที่ใช้ไม่ได้จัดให้มีการส่งข้อมูลการตอบสนองหรือไม่จำเป็นต้องใช้ การถ่ายโอนข้อมูลแบบทางเดียวสามารถพบได้ในชิปต่างๆ เช่น DAC, โพเทนชิโอมิเตอร์แบบดิจิทัล, แอมพลิฟายเออร์ที่ตั้งโปรแกรมได้ และไดรเวอร์ ดังนั้นตัวเลือกที่พิจารณาในการเชื่อมต่อ IC ทาสจึงต้องใช้สายสื่อสาร 3 หรือ 4 สาย

เพื่อให้ทาสไอซีสามารถรับและส่งข้อมูลได้ นอกเหนือจากการมีสัญญาณนาฬิกาแล้ว สาย SS ยังต้องขับต่ำอีกด้วย มิฉะนั้นทาส IC จะไม่ทำงาน เมื่อใช้ IC ภายนอกเพียงตัวเดียว การกำจัดสาย SS อาจเป็นการดึงดูดโดยการขับอินพุตที่เลือกของ IC ทาสให้ต่ำลง โซลูชันนี้ไม่พึงปรารถนาอย่างยิ่งและอาจนำไปสู่ความล้มเหลวหรือแม้กระทั่งการถ่ายโอนข้อมูลไม่ได้เนื่องจาก อินพุตเลือกชิปทำหน้าที่รีเซ็ต IC ให้เป็นสถานะเริ่มต้น และบางครั้งจะเริ่มต้นเอาต์พุตของข้อมูลบิตแรก

หากจำเป็นต้องเชื่อมต่อวงจรขนาดเล็กหลายตัวเข้ากับบัส SPI ให้ใช้การเชื่อมต่อแบบอิสระ (ขนาน) (รูปที่ 7.3) หรือการเชื่อมต่อแบบคาสเคด (อนุกรม) (รูปที่ 7.4) การเชื่อมต่อแบบอิสระเป็นเรื่องปกติมากขึ้นเพราะว่า ทำได้เมื่อใช้ชิปที่รองรับ SPI ที่นี่ สัญญาณทั้งหมด ยกเว้นการเลือกไมโครวงจร มีการเชื่อมต่อแบบขนาน และบัสมาสเตอร์โดยการถ่ายโอนสัญญาณ SS หนึ่งหรือสัญญาณอื่นไปยังสถานะต่ำ จะระบุว่า IC ทาสตัวใดที่จะแลกเปลี่ยนข้อมูล ข้อเสียเปรียบหลักของการเชื่อมต่อนี้คือความต้องการบรรทัดเพิ่มเติมสำหรับระบุชิปทาส (จำนวนสายสื่อสารทั้งหมดคือ 3+n โดยที่ n คือจำนวนชิปทาส)

หากมีขาไมโครคอนโทรลเลอร์ไม่เพียงพอ คุณสามารถใช้ชิปดีมัลติเพล็กเซอร์ได้ อุปกรณ์แยกส่งสัญญาณเชื่อมต่อสัญญาณอินพุตตัวเดียวเข้ากับสัญญาณเอาท์พุตตัวใดตัวหนึ่ง ขึ้นอยู่กับรหัสบนพินควบคุม รูปที่ 7.4 แสดงแผนภาพการเชื่อมต่อสำหรับดีมัลติเพล็กซ์เซอร์ สัญญาณ SS ถูกส่งไปยังอินพุตซึ่งรับค่าเท่ากับ 0 หากจำเป็นต้องเลือกหนึ่งในวงจรไมโคร จำนวนไมโครวงจรที่ต้องการในรหัสไบนารี่จะถูกส่งไปยังขา Am-A0 ซึ่งช่วยให้คุณลดจำนวนขาที่ใช้ในไมโครคอนโทรลเลอร์เป็น m=log 2 n โดยที่ n คือจำนวนชิปทาส เหล่านั้น. ในการเชื่อมต่ออุปกรณ์ 128 ชิ้น ต้องใช้พินไมโครคอนโทรลเลอร์ 8 ตัว อันหนึ่งสำหรับตั้งค่าสัญญาณการเปิดใช้งานและ 7 สำหรับตั้งค่าหมายเลขชิปที่จะเปิด ควรสังเกตว่าจะต้องมีตรรกะบนขาที่ไม่เชื่อมต่อของอุปกรณ์แยกส่งสัญญาณ มิฉะนั้นจะใช้อินเวอร์เตอร์สัญญาณซึ่งจะแปลงศูนย์โลจิคัลให้เป็นโลจิคัล

การสลับแบบคาสเคดนั้นปราศจากข้อเสียเปรียบนี้เพราะว่า ที่นี่ ชิปหลายตัวรวมกันเป็นรีจิสเตอร์กะขนาดใหญ่หนึ่งอัน ในการทำเช่นนี้ เอาต์พุตข้อมูลที่ส่งของ IC ตัวหนึ่งจะเชื่อมต่อกับอินพุตการรับข้อมูลของอีกตัวหนึ่ง ดังแสดงในรูปที่ 3 อินพุตเลือกชิปที่นี่เชื่อมต่อแบบขนาน ดังนั้น จำนวนสายการสื่อสารทั้งหมดจึงเท่ากัน ถึง 4 อย่างไรก็ตาม การใช้การเชื่อมต่อแบบคาสเคดสามารถทำได้เฉพาะเมื่อมีการระบุการสนับสนุนไว้ในเอกสารประกอบสำหรับชิปที่ใช้ หากต้องการทราบ สิ่งสำคัญคือต้องรู้ว่าการเชื่อมต่อดังกล่าวเรียกว่า "daisy-chaining" ในภาษาอังกฤษ

โปรโตคอลการถ่ายโอน

โปรโตคอลการส่งผ่านอินเทอร์เฟซ SPI นั้นเหมือนกับลอจิกของ shift register (รูปที่ 7.6) ซึ่งประกอบด้วยการดำเนินการกะและดังนั้นบิตอินพุตและเอาท์พุตของข้อมูลบนขอบบางส่วนของสัญญาณการซิงโครไนซ์ การตั้งค่าข้อมูลระหว่างการส่งและการสุ่มตัวอย่างระหว่างการรับสัญญาณจะดำเนินการที่ขอบนาฬิกาตรงข้ามกันเสมอ นี่เป็นสิ่งจำเป็นเพื่อให้แน่ใจว่าข้อมูลจะถูกสุ่มตัวอย่างเมื่อมีการสร้างข้อมูลที่เชื่อถือได้แล้ว หากเราคำนึงว่าขอบแรกของวงจรการส่งสัญญาณอาจเป็นขอบขาขึ้นหรือขาลงได้ การทำงานของอินเทอร์เฟซ SPI ก็มีสี่ตัวเลือกลอจิกที่เป็นไปได้ ตัวเลือกเหล่านี้เรียกว่าโหมด SPI และอธิบายด้วยพารามิเตอร์สองตัว:

· CPOL - ระดับเริ่มต้นของสัญญาณการซิงโครไนซ์ (หาก CPOL=0 ดังนั้นเส้นการซิงโครไนซ์ก่อนเริ่มรอบการส่งข้อมูลและหลังสิ้นสุดจะมีระดับต่ำ (เช่น ขอบแรกเพิ่มขึ้น และอันสุดท้ายลดลง) มิฉะนั้น ถ้า CPOL=1, - สูง (เช่น แนวหน้าแรกตกลงไป และแนวหน้าสุดท้ายกำลังขึ้น));

· CPHA - ขั้นตอนการซิงโครไนซ์; พารามิเตอร์นี้กำหนดลำดับในการติดตั้งและดึงข้อมูล หาก CPHA=0 ข้อมูลจะถูกสุ่มตัวอย่างที่ขอบขาขึ้นของรอบสัญญาณนาฬิกา จากนั้นข้อมูลจะถูกตั้งค่าที่ขอบขาลง หาก CPHA=1 การติดตั้งข้อมูลจะดำเนินการบนขอบขาขึ้นในวงจรการซิงโครไนซ์ และการสุ่มตัวอย่างจะดำเนินการบนขอบขาขึ้น

ข้อมูลเกี่ยวกับโหมด SPI แสดงไว้ในรูปที่ 7.7 และ 7.8

ชิปหลักและชิปทาสที่ทำงานในโหมด SPI ที่แตกต่างกันนั้นเข้ากันไม่ได้ ดังนั้น ก่อนที่จะเลือกชิปทาส สิ่งสำคัญคือต้องชี้แจงให้ชัดเจนว่าบัสมาสเตอร์รองรับโหมดใด ในกรณีส่วนใหญ่ โมดูลฮาร์ดแวร์ SPI ที่รวมอยู่ในไมโครคอนโทรลเลอร์จะรองรับความสามารถในการเลือกโหมดใดก็ได้ ดังนั้นชิป SPI ทาสใดๆ จึงสามารถเชื่อมต่อกับชิปเหล่านั้นได้ (ใช้กับตัวเลือกการเชื่อมต่ออิสระเท่านั้น) นอกจากนี้โปรโตคอล SPI ในโหมดใด ๆ ก็สามารถนำไปใช้ในซอฟต์แวร์ได้อย่างง่ายดาย

อินเตอร์เฟซ RS-485

อินเทอร์เฟซ RS-485 (อีกชื่อหนึ่งคือ EIA/TIA-485) เป็นหนึ่งในมาตรฐานเลเยอร์การสื่อสารทางกายภาพที่ใช้กันทั่วไปที่สุด ฟิสิคัลเลเยอร์เป็นช่องทางการสื่อสารและวิธีการส่งสัญญาณ (เลเยอร์ 1 ของโมเดลการเชื่อมต่อโครงข่ายระบบเปิด OSI)

เครือข่ายที่สร้างขึ้นบนอินเทอร์เฟซ RS-485 ประกอบด้วยตัวรับส่งสัญญาณที่เชื่อมต่อโดยใช้สายคู่บิด - สายบิดสองเส้น อินเทอร์เฟซ RS-485 ขึ้นอยู่กับหลักการของการส่งข้อมูลส่วนต่าง (สมดุล) สาระสำคัญคือการส่งสัญญาณหนึ่งผ่านสายสองเส้น ยิ่งไปกว่านั้น สายหนึ่ง (มีเงื่อนไข A) จะส่งสัญญาณต้นฉบับ และอีกเส้นหนึ่ง (มีเงื่อนไข B) จะส่งสัญญาณแบบผกผัน กล่าวอีกนัยหนึ่ง หากมี "1" บนสายหนึ่ง อีกเส้นหนึ่งก็จะเป็น "0" และในทางกลับกัน ดังนั้นจึงมีความแตกต่างที่อาจเกิดขึ้นระหว่างสายทั้งสองของสายคู่บิดเกลียวเสมอ: ที่ "1" เป็นบวกที่ "0" เป็นลบ (รูปที่ 7.9)

ความแตกต่างที่อาจเกิดขึ้นนี้เองที่ส่งสัญญาณ วิธีการส่งสัญญาณนี้ให้ภูมิคุ้มกันสูงต่อการรบกวนโหมดทั่วไป การรบกวนในโหมดร่วมคือการรบกวนที่ส่งผลต่อสายไฟทั้งสองเส้นอย่างเท่าเทียมกัน ตัวอย่างเช่น คลื่นแม่เหล็กไฟฟ้าที่ผ่านส่วนของสายสื่อสารจะเหนี่ยวนำให้เกิดศักย์ไฟฟ้าในสายไฟทั้งสองเส้น หากสัญญาณถูกส่งโดยศักย์ในสายเดียวที่สัมพันธ์กับสายสามัญเช่นเดียวกับใน RS-232 การรบกวนบนสายนี้สามารถบิดเบือนสัญญาณที่สัมพันธ์กับสายสามัญ (กราวด์) ที่ดูดซับสัญญาณรบกวนได้ดี นอกจากนี้ ความต่างศักย์กราวด์จะลดลงข้ามความต้านทานของเส้นลวดร่วมที่ยาว ซึ่งเป็นแหล่งที่มาของการบิดเบือนเพิ่มเติม และด้วยการส่งเฟืองท้ายจะไม่เกิดความผิดเพี้ยน ในความเป็นจริง หากสายไฟสองเส้นวางชิดกันและพันกันด้วยซ้ำ การรับสายทั้งสองเส้นจะเท่ากัน ศักยภาพในสายไฟทั้งสองที่โหลดเท่ากันจะเปลี่ยนแปลงเท่ากัน ในขณะที่ความต่างศักย์ข้อมูลยังคงไม่เปลี่ยนแปลง

การใช้ฮาร์ดแวร์ของอินเทอร์เฟซ RS485

การใช้งานฮาร์ดแวร์ของอินเทอร์เฟซ - ชิปตัวรับส่งสัญญาณที่มีอินพุต/เอาท์พุตส่วนต่าง (ไปยังสาย) และพอร์ตดิจิทัล (ไปยังพอร์ต UART ของคอนโทรลเลอร์) อินเทอร์เฟซนี้มีสองตัวเลือก: RS-422 และ RS-485

RS-422 เป็นอินเทอร์เฟซแบบดูเพล็กซ์เต็มรูปแบบ การรับและส่งสัญญาณเกิดขึ้นบนสายคู่ที่แยกจากกัน สายแต่ละคู่สามารถมีเครื่องส่งสัญญาณได้เพียงตัวเดียวเท่านั้น

RS-485 เป็นอินเทอร์เฟซแบบฮาล์ฟดูเพล็กซ์ การรับและส่งสัญญาณเกิดขึ้นบนสายไฟคู่เดียวโดยมีการแยกเวลา เครือข่ายอาจมีตัวส่งสัญญาณได้หลายตัว เนื่องจากสามารถปิดได้ในโหมดรับ (รูปที่ 7.10)

คำอธิบายสัญลักษณ์ในรูปที่ 7.10

D (คนขับ) - ตัวส่งสัญญาณ;
R (ตัวรับ) - ตัวรับ;
DI (อินพุตไดรเวอร์) - อินพุตดิจิตอลของเครื่องส่งสัญญาณ
RO (เอาต์พุตตัวรับ) - เอาต์พุตดิจิทัลของเครื่องรับ
DE (เปิดใช้งานไดรเวอร์) - การอนุญาตให้ใช้งานเครื่องส่งสัญญาณ
RE (เปิดใช้งานตัวรับ) - การอนุญาตให้ใช้งานตัวรับ
เอ - อินพุต/เอาท์พุตดิฟเฟอเรนเชียลโดยตรง;
B - อินพุต/เอาต์พุตส่วนต่างผกผัน;
Y - เอาท์พุตดิฟเฟอเรนเชียลโดยตรง (RS-422)
Z - เอาต์พุตส่วนต่างผกผัน (RS-422)

มาดูตัวรับส่งสัญญาณ RS-485 กันดีกว่า เอาต์พุตดิจิตอลของเครื่องรับ (RO) เชื่อมต่อกับพอร์ต UART ของตัวรับ (RX) อินพุตดิจิตอลของเครื่องส่งสัญญาณ (DI) ไปยังพอร์ตเครื่องส่งสัญญาณ UART (TX) เนื่องจากเครื่องรับและตัวส่งเชื่อมต่อกันที่ฝั่งดิฟเฟอเรนเชียล จึงต้องปิดเครื่องส่งระหว่างการรับสัญญาณ และต้องปิดเครื่องรับระหว่างการส่งสัญญาณ เพื่อจุดประสงค์นี้ จะใช้อินพุตควบคุม - การอนุญาตของผู้รับ (RE) และการอนุญาตของเครื่องส่งสัญญาณ (DE) เนื่องจากอินพุต RE เป็นแบบผกผัน จึงสามารถเชื่อมต่อกับ DE และสลับเครื่องรับและเครื่องส่งสัญญาณด้วยสัญญาณเดียวจากพอร์ตใดก็ได้ของคอนโทรลเลอร์ ที่ระดับ "0" - ทำงานเพื่อรับที่ "1" - สำหรับการส่งสัญญาณ (รูปที่ 7.11)

เครื่องรับซึ่งได้รับความต่างศักย์ (UAB) ที่อินพุตดิฟเฟอเรนเชียล (AB) จะแปลงเป็นสัญญาณดิจิทัลที่เอาต์พุต RO ความไวของเครื่องรับอาจแตกต่างกัน แต่ผู้ผลิตชิปตัวรับส่งสัญญาณเขียนในเอกสารเกี่ยวกับช่วงเกณฑ์ที่รับประกันสำหรับการรับรู้สัญญาณ โดยทั่วไปเกณฑ์เหล่านี้คือ ±200 mV นั่นคือเมื่อ UAB > +200 mV - เครื่องรับตรวจพบ "1" เมื่อ UAB< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

อุปกรณ์ทั้งหมดเชื่อมต่อกับสายเคเบิลคู่บิดเกลียวเส้นเดียวในลักษณะเดียวกัน: เอาต์พุตโดยตรง (A) ไปยังสายหนึ่ง, เอาต์พุตผกผัน (B) ไปยังอีกสายหนึ่ง

โดยทั่วไปแล้วอิมพีแดนซ์อินพุตตัวรับฝั่งสาย (RAB) คือ 12KΩ เนื่องจากกำลังเครื่องส่งไม่จำกัด จึงทำให้เกิดการจำกัดจำนวนเครื่องรับที่เชื่อมต่อกับสาย ตามข้อกำหนด RS-485 เมื่อคำนึงถึงตัวต้านทานปลายสายแล้ว เครื่องส่งสัญญาณสามารถขับเคลื่อนตัวรับได้สูงสุด 32 ตัว อย่างไรก็ตามมีวงจรขนาดเล็กจำนวนหนึ่งที่มีความต้านทานอินพุตเพิ่มขึ้นซึ่งช่วยให้คุณสามารถเชื่อมต่ออุปกรณ์มากกว่า 32 เครื่องเข้ากับสายได้

ความเร็วในการสื่อสารสูงสุดตามข้อกำหนด RS-485 สามารถเข้าถึง 10 Mbaud/วินาที ระยะทางสูงสุดคือ 1200 เมตร หากจำเป็นต้องจัดระเบียบการสื่อสารในระยะทางมากกว่า 1,200 เมตรหรือเชื่อมต่ออุปกรณ์มากกว่าความสามารถในการรับน้ำหนักของเครื่องส่งสัญญาณจะใช้รีพีทเตอร์พิเศษ

อินเทอร์เฟซ I2C

อินเทอร์เฟซนี้เสนอโดย Philips ซึ่งใช้เพื่อจัดระเบียบการสื่อสารระหว่างชิปในโทรทัศน์ I 2 C (ตัวย่อสำหรับ Inter-Integrated Circuit) เป็นบัสอนุกรมแบบอะซิงโครนัสแบบสองทิศทาง ในทางกายภาพ บัส I 2 C ประกอบด้วยสายสัญญาณสองเส้น โดยเส้นหนึ่ง (SCL) มีไว้สำหรับส่งสัญญาณนาฬิกา และเส้นที่สอง (SDA) สำหรับการแลกเปลี่ยนข้อมูล ในการควบคุมสาย จะใช้สเตจเอาต์พุตที่มีตัวรวบรวมแบบเปิด ดังนั้นสายบัสจะต้องเชื่อมต่อกับแหล่งพลังงาน +5 V ผ่านตัวต้านทานที่มีความต้านทาน 1...10 kOhm ขึ้นอยู่กับความยาวทางกายภาพของเส้นและ อัตราการถ่ายโอนข้อมูล ความยาวของสายเชื่อมต่อในโหมดมาตรฐานสามารถเข้าถึงได้ถึง 2 เมตร อัตราการถ่ายโอนข้อมูลคือ 100 kbit/s

สมาชิกรถบัสทั้งหมดแบ่งออกเป็นสองชั้น - "ผู้นำ" และ "ทาส" อุปกรณ์หลักจะสร้างสัญญาณนาฬิกา (SCL) โดยสามารถเข้าถึงบัสและระบุอุปกรณ์ทาสใดๆ ได้อย่างอิสระเพื่อวัตถุประสงค์ในการส่งหรือรับข้อมูล อุปกรณ์ทาสทั้งหมด "ฟัง" บัสเพื่อตรวจจับที่อยู่ของตัวเองและเมื่อรู้จักแล้วจึงดำเนินการตามที่กำหนด นอกจากนี้ โหมดที่เรียกว่า "MultiMaster" ยังเป็นไปได้เมื่อมีการติดตั้งอุปกรณ์หลักหลายตัวบนบัส ซึ่งแชร์อุปกรณ์ทาสทั่วไปร่วมกัน หรือสลับกันทำหน้าที่เป็นอุปกรณ์หลักเมื่ออุปกรณ์เหล่านั้นเริ่มการแลกเปลี่ยนข้อมูลด้วยตนเอง หรือเป็นอุปกรณ์ทาสเมื่อ พวกเขากำลังรอการเข้าถึงจากอุปกรณ์หลักอื่น โหมด "MultiMaster" ต้องมีการตรวจสอบและรับรู้ข้อขัดแย้งอย่างต่อเนื่อง ในเรื่องนี้โหมดนี้ใช้งานยากกว่า (หมายถึงการใช้งานซอฟต์แวร์) และด้วยเหตุนี้จึงมีการใช้งานน้อยลงในผลิตภัณฑ์จริง

ในช่วงเวลาเริ่มต้น - ในโหมดสแตนด์บาย - ทั้งสองบรรทัด SCL และ SDA อยู่ในสถานะโลจิคัลเดียว (ทรานซิสเตอร์ของสเตจเอาต์พุต open collector ถูกปิด) ในโหมดการส่ง (รูปที่ 7.12) บิตข้อมูล SDA จะถูกโอเวอร์คล็อกโดยขอบที่เพิ่มขึ้นของ SCL ข้อมูลบนบรรทัด SDA มีการเปลี่ยนแปลงเมื่อบรรทัด SCL อยู่ในสถานะศูนย์ อุปกรณ์ทาสสามารถ "พัก" บรรทัด SCL ไว้ในสถานะศูนย์ได้ ตัวอย่างเช่น ขณะประมวลผลไบต์ที่ได้รับถัดไป ในขณะที่อุปกรณ์หลักต้องรอจนกว่าบรรทัด SCL จะว่างก่อนที่จะส่งข้อมูลต่อไป

ในการซิงโครไนซ์แพ็กเก็ตบัส I 2 C เงื่อนไขสองประการจะแตกต่างกัน - "START" และ "STOP" ซึ่งจำกัดจุดเริ่มต้นและจุดสิ้นสุดของแพ็กเก็ตข้อมูล (รูปที่ 7.13) ในการเข้ารหัสเงื่อนไขเหล่านี้ จะใช้การเปลี่ยนแปลงสถานะของบรรทัด SDA ที่มีสถานะเดียวของบรรทัด SCL ซึ่งเป็นที่ยอมรับไม่ได้เมื่อส่งข้อมูล เงื่อนไข "START" จะเกิดขึ้นเมื่อขอบจากมากไปหาน้อยปรากฏขึ้นบนเส้น SDA เมื่อเส้น SCL อยู่ในสถานะเดียว และในทางกลับกัน เงื่อนไข "STOP" จะเกิดขึ้นเมื่อขอบที่เพิ่มขึ้นปรากฏบนเส้น SDA เมื่อ SCL เส้นอยู่ในสถานะเดียว

การส่งข้อมูลเริ่มต้นที่ขอบขาขึ้นตัวแรกบนเส้น SCL ซึ่งจะนาฬิกาบิตที่สำคัญที่สุดของไบต์ข้อมูลแรก แต่ละไบต์ข้อมูล (8 บิต) ประกอบด้วยช่วงสัญญาณนาฬิกา 9 ช่วงของบรรทัด SCL ในรอบที่เก้า อุปกรณ์รับสัญญาณจะทำการตอบรับ (ACK) ซึ่งเป็นขอบที่ตกลงมาซึ่งบ่งบอกถึงการรับข้อมูล ควรสังเกตว่าผู้สมัครสมาชิกบัสทั้งหลักและทาสสามารถเป็นทั้งตัวส่งและตัวรับในเวลาที่แตกต่างกันและตามโหมดนั้นจำเป็นต้องรับหรือส่งสัญญาณ ACK ซึ่งไม่มีการตีความ เป็นข้อผิดพลาด

เพื่อเริ่มการดำเนินการแลกเปลี่ยนข้อมูล อุปกรณ์หลักจะออกเงื่อนไข "START" บนบัส เงื่อนไข “เริ่มต้น” ตามด้วยไบต์พร้อมที่อยู่ของอุปกรณ์ทาส (รูปที่ 7.14) ประกอบด้วยที่อยู่อุปกรณ์เจ็ดบิต (บิต 1...7) และแฟล็กการดำเนินการอ่าน-เขียนหนึ่งบิต - “ R/W” (บิต 0) บิต R/W กำหนดทิศทางของการแลกเปลี่ยน โดย 0 หมายถึงการถ่ายโอนข้อมูลจากต้นแบบไปยังทาส (รูปที่ 7.14a) และ 1 หมายถึงการอ่านจากทาส (รูปที่ 7.14b) บิตทั้งหมดบนบัส I 2 C จะถูกส่งตามลำดับจากสูงไปต่ำนั่นคือบิตที่ 7 จะถูกส่งก่อนบิตที่ 0 สุดท้าย ที่อยู่อาจตามด้วยไบต์ข้อมูลตั้งแต่หนึ่งไบต์ขึ้นไป (ในทิศทางที่ระบุโดยแฟล็ก R/W) ซึ่งบิตจะถูกโอเวอร์คล็อกโดยมาสเตอร์บนบัส SCL

เมื่อดำเนินการอ่าน โฮสต์จะต้อง ACK ไบต์ที่อ่านหากต้องการอ่านไบต์ถัดไป และไม่ออก ACK หากกำลังจะอ่านแพ็กเก็ตเสร็จสิ้น (ดูรูปที่ 7.14b)

อนุญาตให้ดำเนินการที่อยู่ของอุปกรณ์ทาสต่อได้หลายครั้งในรอบการส่งข้อมูลเดียว นั่นคือ การส่งเงื่อนไข "START" ซ้ำโดยไม่มีเงื่อนไข "STOP" ก่อนหน้า (รูปที่ 7.14c)

จำเป็นต้องทราบคุณสมบัติบางอย่างของชิปหน่วยความจำที่ทำงานผ่านอินเทอร์เฟซ I 2 C และขั้นตอนในการแลกเปลี่ยนข้อมูลกับพวกเขา ประการแรก หน่วยความจำข้อมูลแบบไม่ลบเลือนของไมโครวงจรเหล่านี้จะถูกแบ่งออกเป็นหน้าหน่วยความจำ ดังนั้นเมื่อมีการเขียนไบต์ หน้าทั้งหมดจะถูกคัดลอกไปยัง RAM ภายในของไมโครวงจรปิดก่อน ซึ่งเซลล์ที่ต้องการจะเปลี่ยนไป หลังจากนั้นหน้าเก่าจะถูกลบและมีการเขียนหน้าใหม่เข้ามาแทนที่ คุณสมบัติอีกประการหนึ่งคือสี่บิตที่สำคัญที่สุดของที่อยู่ทาสจะต้องเท่ากับ 1010 เสมอ ข้อกำหนดนี้ได้รับการควบคุมโดย Philips เอง

บัส 1 สายใช้ตัวนำเพียงตัวเดียวในการสื่อสารและจ่ายไฟ โหมดการสื่อสารเป็นแบบอะซิงโครนัสและฮาล์ฟดูเพล็กซ์ ซึ่งเป็นไปตามรูปแบบมาสเตอร์-สเลฟอย่างเคร่งครัด อุปกรณ์ทาสตั้งแต่หนึ่งตัวขึ้นไปสามารถเชื่อมต่อกับบัสเดียวกันในเวลาเดียวกันได้ สามารถเชื่อมต่ออุปกรณ์หลักได้เพียงเครื่องเดียวกับบัสเดียว

สถานะว่างของบัสสอดคล้องกับระดับสูง ซึ่งสร้างขึ้นโดยตัวต้านทานแบบดึงขึ้น ค่าของตัวต้านทานแบบดึงขึ้นมีระบุไว้ในเอกสารประกอบสำหรับ IC สลาฟ ชิปทั้งหมดที่เชื่อมต่อกับบัสจะต้องสามารถสร้างระดับต่ำได้ หากเอาต์พุตไมโครคอนโทรลเลอร์ไม่รองรับสามสถานะ จำเป็นต้องจัดเตรียมไดรเวอร์ที่มีตัวรวบรวมแบบเปิดหรือเอาต์พุตแบบเดรนแบบเปิด

การส่งสัญญาณผ่านบัส 1-Wire แบ่งออกเป็นช่วงเวลา 60 µs ข้อมูลจะถูกส่งเพียงหนึ่งบิตต่อช่วงเวลา อุปกรณ์สเลฟได้รับอนุญาตให้มีความแตกต่างอย่างมีนัยสำคัญจากการหน่วงเวลาที่กำหนด อย่างไรก็ตาม สิ่งนี้ต้องการเวลาที่แม่นยำยิ่งขึ้นจากผู้นำเพื่อให้แน่ใจว่าการสื่อสารที่ถูกต้องกับผู้ใต้บังคับบัญชาที่มีฐานเวลาต่างกัน

สัญญาณบัสพื้นฐาน

ต้นแบบเริ่มต้นการสื่อสารแต่ละครั้งที่ระดับบิต ซึ่งหมายความว่าการส่งทุกบิต โดยไม่คำนึงถึงทิศทาง จะต้องเริ่มต้นโดยมาสเตอร์ ซึ่งทำได้โดยการตั้งค่าบัสให้ต่ำ ซึ่งจะซิงโครไนซ์ตรรกะของอุปกรณ์อื่นๆ ทั้งหมด คำสั่งหลักสำหรับการสื่อสารผ่านบัส 1-Wire มี 5 คำสั่ง: “เขียนบันทึก 1”, “เขียนบันทึก 0”, “อ่าน”, “รีเซ็ต” และ “การแสดงตน”

สัญญาณ “เขียนบันทึก 1"

สัญญาณ “เขียนบันทึก 1” แสดงอยู่ในรูปที่. 7.15. ต้นแบบตั้งค่าระดับต่ำเป็นเวลา 1...15 µs หลังจากนั้น รถบัสจะว่างในช่วงเวลาที่เหลือ

ข้าว. 7.15 – สัญญาณ “เขียนบันทึก 1"

สัญญาณ “เขียนบันทึก 0"

สัญญาณ “เขียนบันทึก 0” แสดงในรูปที่ 7.16 ต้นแบบสร้างระดับต่ำเป็นเวลาอย่างน้อย 60 µs แต่ไม่เกิน 120 µs

รูปที่ 7.16 – สัญญาณ “เขียนบันทึก 0"

อ่านสัญญาณ

สัญญาณ "อ่าน" จะแสดงในรูป 7.17. ต้นแบบตั้งค่าระดับต่ำเป็นเวลา 1...15 µs จากนั้นสเลฟจะถือบัสให้ต่ำหากต้องการส่งบันทึก 0. หากจำเป็นต้องโอนบันทึก 1 จากนั้นมันก็ปล่อยบรรทัด การสแกนบัสจะต้องดำเนินการภายใน 15 µs ของบัสที่ลดระดับลง เมื่อมองจากฝั่งมาสเตอร์ สัญญาณ “อ่าน” โดยพื้นฐานแล้วคือสัญญาณ “เขียนบันทึก” 1". สถานะภายในที่แท้จริงของทาสจะถูกกำหนดโดยสัญญาณ "บันทึกบันทึก" 1" หรือ "การอ่าน"

รูปที่ 7.17 – สัญญาณ “อ่าน”

รีเซ็ต/สัญญาณแสดงตน

สัญญาณ "รีเซ็ต" และ "สถานะ" แสดงในรูปที่ 7.18 โปรดทราบว่าช่วงเวลาพัลส์จะแตกต่างกัน ต้นแบบดึงต่ำเป็นเวลา 8 ช่องเวลา (480 µs) จากนั้นจึงปล่อยบัส สภาพต่ำเป็นเวลานานนี้เรียกว่าสัญญาณ "รีเซ็ต"

หากมีทาสอยู่บนบัส ภายใน 60 µs หลังจากที่ต้นแบบปล่อยบัสแล้ว ต้องตั้งค่าระดับต่ำอย่างน้อย 60 µs การตอบสนองนี้เรียกว่า "การมีอยู่" หากตรวจไม่พบสัญญาณดังกล่าว ต้นแบบจะต้องถือว่าไม่มีอุปกรณ์เชื่อมต่อกับบัส และไม่สามารถสื่อสารเพิ่มเติมได้

USB (Universal serial bus) ได้รับการพัฒนาเพื่อเชื่อมต่ออุปกรณ์ภายนอกเข้ากับคอมพิวเตอร์ส่วนบุคคลอย่างรวดเร็ว จากนั้นค้นหาและติดตั้งซอฟต์แวร์ที่จำเป็น อุปกรณ์ที่ใช้พลังงานต่ำได้รับพลังงานโดยตรงผ่านอินเทอร์เฟซ

มาตรฐาน USB หมายถึงการมีอุปกรณ์ Master (Host) เพียงเครื่องเดียวบนเครือข่าย นอกจากนี้มาตรฐานยังรองรับอุปกรณ์ทาสได้มากถึง 127 เครื่องบนเครือข่าย เพื่อแยกความแตกต่างระหว่างอุปกรณ์หลักและอุปกรณ์รอง จึงมีการพัฒนาตัวเชื่อมต่อประเภทต่างๆ (รูปที่ 7.19): ประเภท A สำหรับอุปกรณ์หลักและประเภท B สำหรับอุปกรณ์รอง เป็นที่ยอมรับกันว่าแรงดันไฟฟ้า 5V จะมีอยู่ที่ขั้วต่อชนิด A ซึ่งเป็นขั้วต่อหลักเท่านั้น อุปกรณ์ที่เหลือใช้พลังงานจากอุปกรณ์ดังกล่าวโดยตรง

มาตรฐาน USB ใช้สายหุ้มฉนวน 4 เส้น โดยสองสายในนั้นส่งกำลัง (+5v & GND) (รูปที่ 7.19 และตาราง 7.2) อีกสองตัวแสดงถึงสัญญาณข้อมูลส่วนต่างของคู่บิด รูปแบบการเข้ารหัสที่ใช้ NRZI(Non Return to Zero Invert) สำหรับการส่งข้อมูลพร้อมช่องซิงโครไนซ์เพื่อซิงโครไนซ์นาฬิกาหลักและนาฬิการอง

มาตรฐาน USB 2.0 นำเสนอมาตรฐาน On-The-Go (OTG) ซึ่งแนะนำ Host Negotiation Protocol ซึ่งช่วยให้อุปกรณ์ USB สองตัวตกลงกันว่าใครจะทำหน้าที่เป็นอุปกรณ์หลัก สิ่งนี้มีจุดประสงค์และจำกัดเพียงการเชื่อมต่อแบบจุดต่อจุดเดียว เช่น โทรศัพท์มือถือกับคอมพิวเตอร์ส่วนบุคคล

USB รองรับการเชื่อมต่อแบบ "ร้อน" (plug'n'play) พร้อมไดรเวอร์ที่โหลดและยกเลิกการโหลดแบบไดนามิก ผู้ใช้เพียงแค่เสียบอุปกรณ์และเชื่อมต่อกับบัส โฮสต์ตรวจพบการเชื่อมต่อ สำรวจอุปกรณ์ที่เสียบใหม่และโหลดไดรเวอร์ที่เหมาะสม โดยระบุช่วงเวลาของการโหลดด้วยนาฬิกาทรายบนหน้าจอ (หากติดตั้งไดรเวอร์สำหรับอุปกรณ์ USB ในระบบแล้ว) ผู้ใช้ไม่สนใจเกี่ยวกับการยุติหรือ IRQ(ขัดจังหวะ) และที่อยู่พอร์ต หรือการรีบูตคอมพิวเตอร์ (ไม่จำเป็นต้องรีบูต) เมื่อผู้ใช้ใช้งานอุปกรณ์ USB เสร็จแล้ว เพียงถอดอุปกรณ์ออก (หรือถอดสายเคเบิลออก) โฮสต์จะตรวจจับว่าไม่มีอุปกรณ์และยกเลิกการโหลดไดรเวอร์โดยอัตโนมัติ

SB เวอร์ชัน 1.1 รองรับสองความเร็ว - โหมดความเร็วเต็มด้วยความเร็ว 12 Mbits/s และโหมดความเร็วต่ำด้วยความเร็ว 1.5 Mbits/s โหมด 1.5 Mbits/s ช้าลงและมีความไวต่อ EMI (การรบกวน) น้อยลง ซึ่งช่วยลดต้นทุนของเม็ดเฟอร์ไรต์ และลดข้อกำหนดด้านคุณภาพของส่วนประกอบ

สายเคเบิลบัสความเร็วเต็มเป็นสายคู่บิดเกลียว มีเกราะป้องกัน และยังสามารถใช้สำหรับการทำงานที่ความเร็วต่ำได้อีกด้วย สายเคเบิลสำหรับการใช้งานที่ความเร็วขั้นต่ำเท่านั้น (เช่นเพื่อเชื่อมต่อเมาส์) อาจเป็นสายเคเบิลใดก็ได้และไม่มีการหุ้มฉนวน

มาตรฐาน USB 2.0 แนะนำโหมดความเร็วสูงด้วยอัตราการถ่ายโอนข้อมูล 480Mbits/s

การถ่ายโอนข้อมูล.

การถ่ายโอนข้อมูลทั้งหมดผ่านอินเทอร์เฟซเริ่มต้นโดยโฮสต์ ข้อมูลจะถูกส่งในรูปแบบของแพ็กเก็ต อินเทอร์เฟซ USB ใช้แพ็กเก็ตหลายประเภท:

A) แพคเกจลงนาม (แพ็คเกจโทเค็น) อธิบายประเภทและทิศทางของการถ่ายโอนข้อมูล ที่อยู่อุปกรณ์ และหมายเลขซีเรียลของจุดสิ้นสุด (CT คือส่วนที่ระบุแอดเดรสได้ของอุปกรณ์ USB) แพ็คเกจฟีเจอร์มีหลายประเภท: ใน, ออก, ซอฟ, ติดตั้ง;

B) แพ็คเกจข้อมูล (แพ็กเก็ตข้อมูล) มีข้อมูลที่ส่ง;

B) แพคเกจการอนุมัติ (แพ็คเก็ตการจับมือ) มีวัตถุประสงค์เพื่อรายงานผลการถ่ายโอนข้อมูล แพ็คเกจการประสานงานมีหลายประเภท: อ๊ากก, นาเค, แผงลอย.

การถ่ายโอนข้อมูลผ่าน USB ดำเนินการดังนี้:

แพ็กเก็ตแรกที่เรียกว่าโทเค็น ถูกสร้างขึ้นโดยอุปกรณ์หลักเพื่ออธิบายประเภทของข้อมูลที่กำลังถ่ายโอน การดำเนินการถ่ายโอน (อ่านหรือเขียน) ที่อยู่อุปกรณ์ และจุดสิ้นสุด โดยปกติแล้วการส่งครั้งต่อไปคือแพ็กเก็ตข้อมูลที่มีข้อมูลที่เป็นประโยชน์ ตามด้วยแพ็กเก็ตการจับมือที่ระบุว่าได้รับข้อมูลหรือโทเค็นสำเร็จ หรือจุดสิ้นสุดหยุดทำงานหรือไม่สามารถรับข้อมูลได้

จุดสิ้นสุดในมาตรฐาน USB คือแหล่งที่มาและแหล่งเก็บข้อมูล อุปกรณ์ทั้งหมดต้องรองรับจุดสิ้นสุด 0 นี่คือจุดสิ้นสุดที่ยอมรับคำขอควบคุมและสถานะทั้งหมดในระหว่างการแจงนับ (คำขอจัดการเพื่อกำหนดประเภทของอุปกรณ์ที่เชื่อมต่อ) และตราบใดที่อุปกรณ์ยังคงทำงานบนบัส

จุดสิ้นสุดที่มีหมายเลขตั้งแต่ 1 ใช้เพื่อส่งข้อมูลผู้ใช้ ลองดูตัวอย่างสองสามตัวอย่าง

ไดรเวอร์อุปกรณ์จะส่งข้อมูลไปยังจุดสิ้นสุดอุปกรณ์หลัก EP1 เพราะ อุปกรณ์นี้เป็นอุปกรณ์หลัก จากนั้นข้อมูลจะเข้าสู่บัฟเฟอร์ OUT EP1 ในกรณีนี้ โทเค็น OUT จะถูกส่งเพื่อระบุว่าข้อมูลพร้อมที่จะส่ง หลังจากได้รับโทเค็นนี้ อุปกรณ์สเลฟสามารถอ่านข้อมูลจากบัฟเฟอร์ OUT ได้

หากอุปกรณ์สเลฟจำเป็นต้องถ่ายโอนข้อมูลไปยังอุปกรณ์หลัก อุปกรณ์นั้นจะวางไว้ในบัฟเฟอร์ IN บัฟเฟอร์นี้จะเก็บข้อมูลไว้จนกว่าต้นแบบจะส่งโทเค็น IN เพื่อขอข้อมูลจากปลายทาง บัฟเฟอร์จุดสิ้นสุดทั้งหมดได้รับการตั้งชื่อโดยสัมพันธ์กับบัฟเฟอร์หลัก เช่น บัฟเฟอร์เอาต์พุตของอุปกรณ์ทาสเรียกว่า IN เพราะ มันเป็นบัฟเฟอร์อินพุตสำหรับอุปกรณ์หลัก

การถ่ายโอนข้อมูลจากจุดสิ้นสุดหนึ่งไปยังอีกจุดหนึ่งทำได้ผ่านสตรีม Flow – การเชื่อมต่อเชิงลอจิคัลระหว่างโฮสต์และจุดสิ้นสุด

สตรีมยังมีชุดพารามิเตอร์ เช่น ประเภทการส่งข้อมูล (Control, Bulk, Iso หรือ Interrupt) ทิศทางการไหลของข้อมูล และขนาดแพ็กเก็ต/บัฟเฟอร์สูงสุด

ตัวอย่างเช่น สตรีมเริ่มต้นคือสตรีมแบบสองทิศทางที่ประกอบด้วยจุดปลายทาง IN 0 และจุดสิ้นสุด OUT 0 พร้อมการควบคุมประเภทการถ่ายโอน

USB กำหนดไปป์สองประเภท

A) ท่อสตรีมไม่มีรูปแบบ USB ที่กำหนดไว้ล่วงหน้า ดังนั้นคุณจึงสามารถส่งข้อมูลประเภทใดก็ได้ผ่านสตรีมไปป์และกู้คืนข้อมูลที่ปลายอีกด้านหนึ่งได้ สตรีมข้อมูลเป็นแบบต่อเนื่องและมีทิศทางที่กำหนดไว้ล่วงหน้า - เข้าหรือออก สตรีมไปป์รองรับประเภทการถ่ายโอนแบบเทกอง แบบไอโซโครนัส และแบบขัดจังหวะ สตรีมไปป์สามารถควบคุมได้จากโฮสต์หรืออุปกรณ์

B) ไปป์ข้อความมีรูปแบบ USB ที่กำหนดไว้ล่วงหน้า ควบคุมโดยโฮสต์ เริ่มต้นโดยคำขอที่ส่งจากโฮสต์ ข้อมูลจะถูกส่งไปในทิศทางที่ต้องการซึ่งระบุไว้ในคำขอ ดังนั้นไปป์ข้อความจึงอนุญาตให้ถ่ายโอนข้อมูลได้ทั้งสองทิศทาง แต่รองรับเฉพาะการถ่ายโอนการควบคุมเท่านั้น

มาตรฐาน USB อธิบายการถ่ายโอนข้อมูลสี่ประเภท:

A) ควบคุมการส่งต่อ (ควบคุมการถ่ายโอน) ใช้สำหรับการกำหนดค่าอุปกรณ์ตลอดจนวัตถุประสงค์เฉพาะอุปกรณ์อื่นๆ

ข) สตรีมมิ่ง (โอนจำนวนมาก) ใช้ในการส่งข้อมูลจำนวนค่อนข้างมาก

B) การขัดจังหวะการส่งต่อ (การโอนซ้ำ) ใช้เพื่อส่งข้อมูลจำนวนค่อนข้างน้อย ซึ่งเป็นสิ่งสำคัญในการส่งข้อมูลอย่างทันท่วงที โดยมีระยะเวลาจำกัดและมีลำดับความสำคัญสูงกว่าเมื่อเทียบกับการโอนประเภทอื่นๆ

D) การส่งต่อแบบ Isochronous (การถ่ายโอนแบบไม่ต่อเนื่อง) เรียกอีกอย่างว่าการสตรีมแบบเรียลไทม์ ข้อมูลที่ส่งในการถ่ายโอนดังกล่าวต้องใช้มาตราส่วนแบบเรียลไทม์ระหว่างการสร้าง การส่ง และการรับ

การถ่ายโอนแบบสตรีมมิ่ง โดดเด่นด้วยการรับประกันการถ่ายโอนข้อมูลที่ปราศจากข้อผิดพลาดระหว่างโฮสต์และฟังก์ชันโดยการตรวจจับข้อผิดพลาดระหว่างการส่งและการขอข้อมูลอีกครั้ง เมื่อโฮสต์พร้อมที่จะรับข้อมูลจากฟังก์ชัน จะส่งแพ็กเก็ตแฟล็กไปยังฟังก์ชัน ใน-ถุงพลาสติก เพื่อตอบสนองต่อสิ่งนี้ ฟังก์ชันในขั้นตอนการถ่ายโอนข้อมูลจะส่งแพ็กเก็ตข้อมูลไปยังโฮสต์หรือถ้าส่ง

เอสพีไอใน Arduino เป็นหนึ่งในโปรโตคอลหลักสำหรับการแลกเปลี่ยนข้อมูลระหว่างบอร์ด Arduino และอุปกรณ์ที่เชื่อมต่อ เมื่อใช้ร่วมกับ I2C และ UART โปรโตคอลนี้มักจะใช้กับอุปกรณ์ต่อพ่วงหลายประเภท ดังนั้นความรู้เกี่ยวกับหลักการทำงานของ SPI จึงเป็นสิ่งจำเป็นสำหรับวิศวกร Arduino ทุกคน ในบทความนี้ เราจะดูหลักการพื้นฐาน รูปแบบการโต้ตอบ และวิธีการเชื่อมต่อเซ็นเซอร์และหน้าจอ SPI กับ Arduino โดยย่อ

SPI เป็นโปรโตคอลการถ่ายโอนข้อมูลที่ใช้กันอย่างแพร่หลายระหว่างไมโครคอนโทรลเลอร์ (Master) และอุปกรณ์ต่อพ่วง (Slave) ในโครงการของเรา บอร์ด Arduino มักใช้เป็นบอร์ดหลัก อินเทอร์เฟซ SPI ถูกคิดค้นและใช้งานโดย Motorola แต่เมื่อเวลาผ่านไปก็กลายเป็นมาตรฐานอุตสาหกรรม ข้อได้เปรียบหลักของการทำงานกับอินเทอร์เฟซนี้คือความเร็วสูงและความสามารถในการเชื่อมต่ออุปกรณ์หลายตัวบนบัสข้อมูลเดียว

พิน SPI และพิน

การสื่อสารผ่านอินเทอร์เฟซ SPI arduino เกิดขึ้นระหว่างอุปกรณ์หลายตัวที่อยู่ใกล้กัน บอร์ด Arduino มีพินแยกสำหรับ SPI การจับคู่เกิดขึ้นโดยใช้ผู้ติดต่อสี่ราย:

  • MOSI – ข้อมูลจะถูกส่งผ่านบรรทัดนี้ไปยัง Slave จาก Master
  • มิโซะ – ใช้เพื่อถ่ายโอนข้อมูลไปยัง Master จาก Slave
  • SCLK – การสร้างพัลส์นาฬิกาสำหรับการส่งข้อมูลแบบซิงโครนัส
  • SS – การเลือกอุปกรณ์ทาส

ปฏิสัมพันธ์ของอุปกรณ์ 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 สอดคล้องกับพิน 11 หรือ ICSP-4, MISO – 12 หรือ ICSP-1, SCK – 13 หรือ ICSP-3, SS (ทาส) – 10
  • Mega1280 หรือ Mega2560: MOSI – 51 หรือ ICSP-4, MISO – 50 หรือ ICSP-1, SCK – 52 หรือ ICSP-3, SS (ทาส) – 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 รุ่นล่าสุดขยายขีดความสามารถของผู้ใช้และช่วยให้คุณสามารถดำเนินงานได้มากกว่าไมโครคอนโทรลเลอร์อื่นๆ ตัวอย่างเช่น สามารถควบคุมอุปกรณ์ทาสได้โดยอัตโนมัติและเลือกการกำหนดค่าต่างๆ โดยอัตโนมัติ (ความเร็วสัญญาณนาฬิกา โหมด ฯลฯ)

ไลบรารี Arduino SPI

ในการทำงานกับ Arduino ได้มีการสร้างไลบรารีแยกต่างหากที่ใช้ SPI ก่อนที่จะเริ่มโค้ดคุณต้องเพิ่ม #include เพื่อเปิดใช้งานห้องสมุด

ฟังก์ชั่นหลัก:

  • start() และ end() – เปิดและปิดการทำงาน ในระหว่างการกำหนดค่าเริ่มต้น บรรทัด SCLK, MOSI และ SS ได้รับการกำหนดค่าที่เอาต์พุต โดยส่งระดับต่ำไปยัง SCLK, MOSI และระดับสูงไปยัง SS ฟังก์ชัน end() จะไม่เปลี่ยนระดับบรรทัด จำเป็นต้องปิดบล็อกที่เกี่ยวข้องกับอินเทอร์เฟซบนบอร์ด Arduino
  • setBitOrder(คำสั่งซื้อ) – การตั้งค่าลำดับการส่งบิตข้อมูล (MSBFIRST – ลำดับความสำคัญของบิตที่สำคัญที่สุด, LSBFIRST – ลำดับความสำคัญของบิตที่มีนัยสำคัญน้อยที่สุด)
  • setClockDivider(ตัวแบ่ง) - การตั้งค่าตัวแบ่งความถี่นาฬิกาหลัก คุณสามารถตั้งค่าตัวหารเป็น 2, 4, 8, 16, 32, 64 และ 128 โดยมีการเขียนดังนี้ - SPI_CLOCK_DIVn โดยที่ n คือตัวหารที่เลือก
  • setDataMode(mode) – เลือกหนึ่งในสี่โหมดการทำงาน
  • ถ่ายโอน (ค่า) - ถ่ายโอนไบต์จากอุปกรณ์หลักและส่งกลับไบต์ที่ได้รับจากอุปกรณ์สลาฟ
  • shiftIn(miso_pin, sclk_pin, bit_order) และ shiftOut(mosi_pin, sclk_pin, order, value) – การรับและส่งข้อมูลสามารถเชื่อมต่อกับพินดิจิทัลใดก็ได้ แต่ก่อนหน้านั้นคุณต้องกำหนดค่าด้วยตนเอง

ข้อดีและข้อเสียของ SPI

ข้อดีของอินเทอร์เฟซ SPI:

  • ความสามารถในการส่งข้อมูลขนาดใหญ่ไม่จำกัดเพียง 8 บิต
  • ง่ายต่อการใช้งานซอฟต์แวร์
  • ความเรียบง่ายของการใช้งานฮาร์ดแวร์
  • จำเป็นต้องใช้พินน้อยกว่าอินเทอร์เฟซแบบขนาน
  • เฉพาะความเร็วของอุปกรณ์เท่านั้นที่จะจำกัดความถี่สัญญาณนาฬิกาสูงสุด

ข้อบกพร่อง:

  • พินจำนวนมากเมื่อเทียบกับ I2C
  • Slave ไม่สามารถควบคุมการไหลของข้อมูลได้
  • ขาดโปรโตคอลการตรวจจับข้อผิดพลาดมาตรฐาน
  • หลายวิธีในการใช้งานอินเทอร์เฟซ
  • ขาดการยืนยันการรับข้อมูล

ตัวอย่างการใช้ Arduino SPI ในโปรเจ็กต์ที่มีเซ็นเซอร์ความดัน

ในการดำเนินโครงการนี้ เราจำเป็นต้องมี Arduino, เซ็นเซอร์ความดัน, เขียงหั่นขนม และสายไฟ ตัวอย่างการเชื่อมต่อเซ็นเซอร์แสดงในรูป

การใช้เซ็นเซอร์ SCP1000 ทำให้สามารถจดจำพารามิเตอร์ต่างๆ เช่น ความดันและอุณหภูมิ และส่งค่าเหล่านี้ผ่าน SPI ได้

องค์ประกอบพื้นฐานของแบบร่างโปรแกรม

ประการแรก รีจิสเตอร์เซ็นเซอร์จะถูกลงทะเบียนในโค้ดโดยใช้ setup() อุปกรณ์ส่งคืนค่าหลายค่า - หนึ่งใน 19 บิตสำหรับความดันที่ได้รับและอีก 16 บิตสำหรับอุณหภูมิ หลังจากนั้น จะมีการอ่านไบต์อุณหภูมิสองไบต์ และอ่านความดันเป็นสองขั้นตอน ขั้นแรกโปรแกรมจะใช้บิตที่สำคัญที่สุดสามบิตจากนั้น 16 บิตถัดไป หลังจากนั้นเมื่อใช้ bit shift ค่าทั้งสองนี้จะรวมกันเป็นหนึ่งเดียว ความดันที่แท้จริงคือค่า 19 หลักหารด้วย 4

แรงดันคงที่ = 0x1F; // ขั้นตอนแรกของการกำหนดความดัน (ตรวจพบสามบิตที่สำคัญที่สุด)

ค่าคงที่ PRESSURE_LSB = 0x20; // ขั้นที่สอง ซึ่งกำหนดความดัน 16 บิต

ค่าคงที่ int อุณหภูมิ = 0x21; //16 บิตสำหรับอุณหภูมิ

หากต้องการอ่านข้อมูลอุณหภูมิและแปลงเป็นเซลเซียส จะใช้องค์ประกอบรหัสต่อไปนี้:

int tempData = อ่านลงทะเบียน(0x21, 2);

ลอย realTemp = (ลอย) tempData / 20.0; // เพื่อกำหนดค่าอุณหภูมิจริงเป็นเซลเซียส คุณต้องหารตัวเลขผลลัพธ์ด้วย 20

Serial.print("ชั่วคราว

Serial.พิมพ์(realTemp);

การอ่านบิตความดันและรวมเข้าด้วยกัน:

ไบต์ pressure_data_high = readRegister (0x1F, 1);

ความดัน_ข้อมูล_สูง &= 0b00000111;

int pressure_data_low ที่ไม่ได้ลงนาม = readRegister (0x20, 2);

ความดันยาว = ((pressure_data_high<< 16) | pressure_data_low) / 4; //определение давления в Паскалях.

บทสรุปโดยย่อเกี่ยวกับ SPI

มักพบโล่และเซ็นเซอร์ SPI ในโปรเจ็กต์ Arduino ดังนั้นคุณจำเป็นต้องรู้ว่าโปรโตคอลนี้ทำงานอย่างไร โดยหลักการแล้ว การเชื่อมต่ออุปกรณ์ SPI ไม่มีอะไรซับซ้อน สิ่งสำคัญคือการเชื่อมต่อสายไฟอย่างถูกต้องและใช้วิธีการไลบรารีมาตรฐานในลำดับที่ถูกต้อง สำหรับอุปกรณ์บางอย่าง เช่น การ์ด SD หรือหน้าจอ OLED โดยหลักการแล้วไม่มีทางเลือกอื่น

ขอให้เป็นวันที่ดี! บทความวันนี้เป็นการพูดนอกเรื่องทางทฤษฎีเล็กน้อยที่จะช่วยเราในการเรียนรู้หลักสูตรการเขียนโปรแกรม Arduino เราจะพูดถึงอินเทอร์เฟซ SPI มันคืออะไรและกินกับอะไรเราจะพยายามหาคำตอบในบทความนี้

เริ่มต้นด้วยคำจำกัดความ. เอสพีไอ(อินเทอร์เฟซอุปกรณ์ต่อพ่วงแบบอนุกรม - อินเทอร์เฟซอุปกรณ์ต่อพ่วงแบบอนุกรม) คือมาตรฐานการส่งข้อมูลแบบอนุกรมซิงโครนัส ซึ่งออกแบบมาเพื่อสื่อสารคอนโทรลเลอร์กับอุปกรณ์ต่อพ่วงต่างๆ อินเทอร์เฟซนี้เรียบง่ายและสะดวก ไลบรารีพิเศษสำหรับการทำงานกับ SPI เขียนขึ้นสำหรับ Arduino

การสื่อสารเป็นไปตามหลัก “นาย-ทาส” คอนโทรลเลอร์มักจะเป็นอุปกรณ์หลัก อุปกรณ์อื่นๆ ทั้งหมดที่เชื่อมต่อกับระบบนั้นเป็นอุปกรณ์สเลฟ ข้อมูลจากอุปกรณ์หลักจะถูกส่งผ่านบัสข้อมูลไปยังหนึ่งในทาสที่เลือก หรือในทางกลับกันจากอุปกรณ์ทาสไปยังต้นแบบพร้อมกัน โดยใช้สัญญาณนาฬิกาหลัก

pinout บัสข้อมูล SPIประกอบด้วย 4 บรรทัด: MOSI, มิโซะ, CS และ SCLK:

  • โมซี่(Master Out Slave In - เอาต์พุตหลัก, อินพุต Slave) หรือเพียงแค่ เอสไอ– การถ่ายโอนข้อมูลจากอุปกรณ์หลักไปยังอุปกรณ์สลาฟ
  • มิโซะ(Master In Slave Out - มาสเตอร์อินพุต, เอาต์พุตทาส) หรือเพียงแค่ ดังนั้น– การถ่ายโอนข้อมูลเกิดขึ้นจากอุปกรณ์ทาสไปยังอุปกรณ์หลัก
  • ซี.เอส.(เลือกชิป - การเลือกชิป) หรือ เอสเอส(เลือกทาส — การเลือกทาส) – การเลือกอุปกรณ์ทาส
  • เอสซีแอลเค(นาฬิกาอนุกรม) หรือเพียงแค่ เอสซีเค– การส่งสัญญาณนาฬิกาจากต้นแบบไปยังทาส

ในการถ่ายโอนข้อมูลจากต้นแบบไปยังทาส จำเป็นสำหรับต้นแบบที่จะตั้งค่าระดับสัญญาณต่ำบนสาย CS ของทาสที่จะสร้างการสื่อสาร บิตจะถูกถ่ายโอนผ่านสาย MOSI หากต้องการหยุดการส่งข้อมูล ผู้นำจะ "ปล่อย" สาย CS เหมือนเดิม โดยตั้งค่าระดับสัญญาณให้สูง

ในการเชื่อมต่ออุปกรณ์ทาสหลายตัวเข้ากับบัสข้อมูล SPI อุปกรณ์แต่ละตัวจะต้องมีสาย CS ของตัวเอง เมื่อดำเนินการเสร็จแล้ว อุปกรณ์หลักสามารถ "ดึง" เส้นสลับกัน โดยสลับระหว่างอุปกรณ์สเลฟ สเลฟหลายตัวสามารถเชื่อมต่อได้หลายวิธี: แบบขนานหรือแบบอนุกรม

การเชื่อมต่อแบบขนานของอุปกรณ์ทาสผ่านบัสข้อมูล SPI

ลักษณะเฉพาะของการเชื่อมต่อแบบขนานของอุปกรณ์ทาสหลายตัวคือใช้สายทั่วไป SCLK, MOSI และ MISO เพื่อสร้างการสื่อสาร ในกรณีนี้ อุปกรณ์ทาสแต่ละตัวจะมีสาย SS(CS) ของตัวเอง อุปกรณ์หลักจะกำหนดว่า "ทาสปัจจุบัน" ใดที่จะสร้างการแลกเปลี่ยนข้อมูลด้วยการสร้างระดับสัญญาณต่ำบนสาย SSn ที่เกี่ยวข้อง (โดยที่ n – 1,2...)

ในการเชื่อมต่ออุปกรณ์ทาสจำนวน n จำนวนเข้ากับคอนโทรลเลอร์ผ่านอินเทอร์เฟซ SPI คุณต้องจัดสรรอุปกรณ์เหล่านั้นเพื่อจุดประสงค์นี้ n+3หมุดไมโครคอนโทรลเลอร์

การเชื่อมต่อแบบอนุกรมของอุปกรณ์ทาสกับบัส SPI

สำหรับการเชื่อมต่อแบบอนุกรมของอุปกรณ์ทาสนั้นใช้สายทั่วไป SCLK และ SS และเอาต์พุตของอุปกรณ์หนึ่งเชื่อมต่อกับอินพุตของอีกเครื่องหนึ่ง สาย MOSI ของต้นแบบเชื่อมต่อกับทาสตัวแรก และสาย MISO เชื่อมต่อกับสุดท้าย หากคุณดูการเชื่อมต่อนี้จากมุมมองของอุปกรณ์หลัก แสดงว่าอุปกรณ์รองหนึ่งเครื่องเชื่อมต่อผ่านบัสข้อมูล SPI

ข้อดีของการเชื่อมต่อประเภทนี้ควรสังเกต: คุณสามารถเชื่อมต่ออุปกรณ์จำนวนที่ n ได้โดยใช้ไมโครคอนโทรลเลอร์เพียง 4 พินเพื่อจุดประสงค์นี้

ในตอนนี้ก็เหลือเพียงเท่านี้ ต่อไป...

วันนี้เรามาเริ่มทำความรู้จักกับยางกัน SPI (อินเทอร์เฟซอุปกรณ์ต่อพ่วงแบบอนุกรม).

รถบัสนี้ใช้กันอย่างแพร่หลายในอุปกรณ์อิเล็กทรอนิกส์ สะดวกมากเป็นแบบซิงโครนัสและฟูลดูเพล็กซ์ดังนั้นจึงใช้ในหลายวงจรเพื่อการสื่อสารระหว่างอุปกรณ์ดิจิทัลต่างๆ - เซ็นเซอร์ตัวควบคุมไดรเวอร์และอุปกรณ์อื่น ๆ

ปัจจัยสำคัญอีกประการหนึ่งในความต้องการความคุ้นเคยของเราก็คือบัสนี้จัดอยู่ในฮาร์ดแวร์ในตัวควบคุม เอวีอาร์.

ยิ่งกว่านั้นไม่ว่าเราต้องการหรือไม่ก็ตาม เราก็สื่อสารกับอินเทอร์เฟซ SPI มาเป็นเวลานาน ทันทีที่เราเริ่มแฟลชคอนโทรลเลอร์ของเราเป็นครั้งแรก เนื่องจากมันถูกแฟลชผ่านอินเทอร์เฟซนี้

เลยอยากมาทำความรู้จักกับยางรุ่นนี้ให้มากขึ้น

มาเปิดเอกสารทางเทคนิคสำหรับคอนโทรลเลอร์ Atmega8 เปิดหน้าที่แสดง pinout ของคอนโทรลเลอร์นี้และดูว่าพิน 16 ถึง 19 เป็นที่ตั้งของพินบัส SPI

ตอนนี้เพิ่มเติมเล็กน้อยเกี่ยวกับการค้นพบเหล่านี้

SS (เลือกชิป)— นี่คือขาเลือกอุปกรณ์ หากอุปกรณ์ทาสบนพินนี้ถูกตั้งค่าไว้ที่ระดับต่ำ อุปกรณ์นี้จะตอบสนองและแลกเปลี่ยนข้อมูลผ่านบัส SPI หากอยู่ในระดับสูงก็จะไม่

MOSI (อินพุตทาสเอาต์พุตหลัก)- นี่คือพินเอาท์พุตของอุปกรณ์หลักและอินพุตของอุปกรณ์สลาฟ

มิโซะ (เอาต์พุตทาสอินพุตหลัก)- ในทางตรงกันข้าม เอาต์พุตของทาส อินพุตของมาสเตอร์

เอสซีเค- ขาซิงโครไนซ์ อุปกรณ์ทั้งหมดที่เข้าร่วมในการแลกเปลี่ยนข้อมูลบนบัสนี้จะได้รับพัลส์นาฬิกาที่ความถี่ที่แน่นอน

นี่คือแผนภาพการใช้งานบัส SPI ในคอนโทรลเลอร์ Atmega8

เช่นเดียวกับรถบัสอื่นๆ มีรีจิสเตอร์จำนวนหนึ่งที่จัดเก็บข้อมูลบางอย่างไว้

เราสนใจ SHIFT REGISTER มีการแลกเปลี่ยนข้อมูลผ่านมัน ทันทีที่มีขอบบนพินการซิงโครไนซ์ ไม่ว่าจะจากมากไปหาน้อยหรือจากน้อยไปมาก ขึ้นอยู่กับการตั้งค่า รีจิสเตอร์ของอุปกรณ์สลาฟและอุปกรณ์หลักเหล่านี้จะแลกเปลี่ยนข้อมูล ไม่ใช่ข้อมูลทั้งหมด แต่จะเป็นเพียงบิตเดียวเท่านั้น รีจิสเตอร์เหล่านี้จะเลื่อนไปทางซ้าย และบิตที่สำคัญที่สุดจากรีจิสเตอร์แต่ละตัวจะไปที่บิตที่มีนัยสำคัญน้อยที่สุดของรีจิสเตอร์เดียวกันของอุปกรณ์ที่เกี่ยวข้อง นั่นคือ สเลฟจะส่งบิตที่สำคัญที่สุดผ่านพิน MOSI ไปยังผู้นำ ซึ่งจะเขียนมันลงในบิตลำดับต่ำที่ว่างเนื่องจากการเลื่อนไปทางซ้าย และสเลฟจะถ่ายโอนบิตลำดับสูงที่ถูกแทนที่ผ่าน MISO ปักหมุดไว้ที่บิตลำดับต่ำของผู้นำ นี่คือวิธีที่การแลกเปลี่ยนดำเนินไป นั่นคือใน 8 รอบนาฬิกาเต็ม พวกเขาจะแลกเปลี่ยนไบต์โดยสมบูรณ์

ทันทีที่มีการส่งข้อมูลทั้งหมด 8 บิตในหนึ่งไบต์ การลงทะเบียนบางอย่างจะส่งสัญญาณให้เราทราบว่ากระบวนการนี้เสร็จสมบูรณ์ หรือค่อนข้างจะเป็นการลงทะเบียนบางอย่าง

นอกจากนี้ในแผนภาพบล็อก เราเห็นตัวแบ่ง ซึ่งอินพุตจะได้รับพัลส์นาฬิกา จากนั้นหารด้วยค่าที่กำหนด พวกมันจะถูกส่งผ่านสายโซ่ไปยังพิน SCK และจากนั้นพวกมันจะถูกป้อนไปยังอุปกรณ์ทาสบนพินของ ชื่อเดียวกัน สิ่งนี้ทำให้มั่นใจได้ถึงการทำงานของอุปกรณ์ที่ซิงโครไนซ์กัน ความถี่สัญญาณนาฬิกาจะถูกเลือกจากความถี่ต่ำสุดที่รองรับโดยอุปกรณ์ทั้งหมดที่เข้าร่วมในการแลกเปลี่ยน

ฉันพูดพหูพจน์เพราะสามารถมีอุปกรณ์ได้มากกว่าสองเครื่องในวงจรที่กำหนด ฉันจะมั่นใจได้อย่างไรหากอุปกรณ์ไม่มีที่อยู่ใด ๆ ฉันจะบอกคุณตอนนี้

มีหลายวิธีในการแลกเปลี่ยนข้อมูลระหว่างอุปกรณ์ต่างๆ กล่าวคือ เมื่อมีทาสหลายตัวต่ออุปกรณ์หลักหนึ่งเครื่อง เราจะดูสองสิ่งที่พบบ่อยที่สุด

วิธีแรกคือรัศมี (คลิกที่ภาพเพื่อขยายภาพ)

ที่นี่ต้นแบบนำข้อมูลไปยังอุปกรณ์เฉพาะโดยเปิดโลจิคัล 0 บนพิน SS ด้วยวิธีนี้คุณสามารถเลือกอุปกรณ์ได้เพียงเครื่องเดียวคุณจะต้องมีพินว่างหลายพอร์ตของพอร์ตคอนโทรลเลอร์ด้วย

มีอีกวิธีที่น่าสนใจ - วงแหวนหรือน้ำตก (คลิกที่ภาพเพื่อขยายภาพ)

ที่นี่เราจะเห็นว่าขาเลือกนั้นขนานกันทั้งหมดและการแลกเปลี่ยนจะเป็นวงกลม ดังนั้นความเร็วจึงลดลงเนื่องจากวงกลมการส่งกำลังเพิ่มขึ้น แต่ขาพอร์ตจะถูกบันทึกไว้

เราจะศึกษารายละเอียดทั้งหมดนี้ในบทเรียนถัดไป เมื่อเราใช้อุปกรณ์บางอย่างในโครงการของเรา

ดูเหมือนว่าจะมีวงจรการส่งข้อมูลผ่านบัส เอสพีไอเราคิดออกแล้ว

ตอนนี้เรามาดูวิธีควบคุมกระบวนการนี้ที่ระดับการลงทะเบียนฮาร์ดแวร์ของคอนโทรลเลอร์ AVR

เราเห็นรีจิสเตอร์เหล่านี้ในแผนภาพบล็อกด้านบนบนหน้า

Atmega8 มีการลงทะเบียนต่อไปนี้สำหรับการให้บริการบัส SPI

SPDR (การลงทะเบียนข้อมูล SPI)- การลงทะเบียนข้อมูลในบล็อกไดอะแกรมคือ DATA BUFFER เราจะป้อนไบต์ลงในรีจิสเตอร์นี้สำหรับการส่งข้อมูลไปยังอุปกรณ์สลาฟในภายหลัง และจากนั้นเราจะอ่านไบต์ข้อมูลที่มาจากอุปกรณ์สลาฟ ไม่จำเป็นที่คอนโทรลเลอร์ของเราจะเป็นอุปกรณ์หลัก ต่อจากนั้นเราจะประกอบวงจรของตัวควบคุมสองตัว ซึ่งตัวหนึ่งจะเป็นทาส ดังนั้นจึงอยู่ในการลงทะเบียนนี้ว่าจะระบุไบต์สำหรับทั้งการส่งและรับ

SPCR (รีจิสเตอร์ควบคุม SPI)- ควบคุมการลงทะเบียน

รีจิสเตอร์นี้ประกอบด้วยบิตต่อไปนี้:

SPIE (เปิดใช้งานการขัดจังหวะ SPI)- บิตที่ทำให้เกิดการขัดจังหวะ

SPE (เปิดใช้งาน SPI)— บิตที่เปิดใช้งานบัส SPI

DORD (ลำดับข้อมูล)— บิตที่กำหนดลำดับการส่งบิต หากตั้งค่าเป็น 1 บิตที่มีนัยสำคัญน้อยที่สุดจะถูกส่งก่อน หากตั้งค่าเป็น 0 บิตที่สำคัญที่สุดจะถูกส่งไป

MSTR (เลือกหลัก/รอง)— บิตที่กำหนดอุปกรณ์ว่าเป็นอุปกรณ์หลักหรืออุปกรณ์รอง เมื่อบิตนี้ถูกตั้งค่าเป็น 1 อุปกรณ์จะเป็นอุปกรณ์หลัก

CPOL (ขั้วนาฬิกา)— ขั้วการซิงโครไนซ์กำหนดที่ขอบของพัลส์ซิงโครไนซ์ที่โหมดสแตนด์บายจะเริ่มขึ้น

หากบิตนี้เป็น 1 เราจะมีโหมดสแตนด์บายที่มีขอบจากน้อยไปมาก และถ้าเป็น 0 เราก็จะมีโหมดสแตนด์บายจากมากไปน้อย

CPHA (เฟสนาฬิกา)— มีความรับผิดชอบเล็กน้อยต่อเฟสสัญญาณนาฬิกา นั่นคือบิตจะถูกส่งไปที่ขอบใด

ลองดูแผนภาพการถ่ายโอนข้อมูลขึ้นอยู่กับการติดตั้ง CPOL และ CPHA

นี่เป็นการพึ่งพาที่น่าสนใจมาก บางครั้งเราเห็นในลักษณะทางเทคนิคของอุปกรณ์ เช่น สามารถทำงานในโหมด SPI 0:0 และ SPI 1:1 ได้ และนี่คือสิ่งที่เกี่ยวข้องกับการตั้งค่าบิตเหล่านี้

SPR1, SPR0 (เลือกอัตรานาฬิกา SPI)- สิ่งเหล่านี้คือบิตที่รับผิดชอบค่าของตัวแบ่งความถี่การซิงโครไนซ์ซึ่งทำงานร่วมกับบิต SPI2Xอยู่ในทะเบียนสถานะ นอกจากนี้ยังเป็นตัวควบคุมด้วยเนื่องจากแปดบิตในรีจิสเตอร์ควบคุมไม่เพียงพอสำหรับการตั้งค่าทั้งหมด และยังมีบิตว่างมากมายในรีจิสเตอร์สถานะ

SPSR (การลงทะเบียนสถานะ SPI)- การลงทะเบียนสถานะ

SPI2X (บิตความเร็ว SPI สองเท่า)- บิตที่เพิ่มความเร็วเป็นสองเท่า โดยทำงานร่วมกับบิต SPR1 และ SPR0 ของรีจิสเตอร์ควบคุม

เรามาดูการพึ่งพาความถี่ของทั้งสามบิตนี้กัน

SPIF (แฟล็กขัดจังหวะ SPI)- ขัดจังหวะธง เรากำลังรอให้บิตนี้ตั้งค่าเป็นหนึ่ง เมื่อเราได้รับไบต์ ทันทีที่ไบต์จากอุปกรณ์อื่นปรากฏในบัฟเฟอร์ของเราโดยสมบูรณ์ ธงนี้จะถูกตั้งค่า การตั้งค่าสถานะนี้จะใช้งานได้ก็ต่อเมื่อมีการตั้งค่าบิตที่เปิดใช้งานการขัดจังหวะ เช่นเดียวกับการเปิดใช้งานการขัดจังหวะทั่วโลก

WCOL (เขียนธง COLlision)— ธงข้อขัดแย้งหรือการชนกันจะถูกตั้งค่าหากมีข้อขัดแย้งเล็กน้อยระหว่างการถ่ายโอนข้อมูล หากในระหว่างการถ่ายโอนข้อมูล มีความพยายามในการเขียนไปยังการลงทะเบียนข้อมูล

ตอนนี้เราสามารถพูดได้ว่าเราคุ้นเคยกับอินเทอร์เฟซ SPI เพียงเล็กน้อยแล้ว

ชมวิดีโอสอน(คลิกที่ภาพ)

ยอดดูโพสต์: 6,294

ด้วยพิกัดตั้งแต่ 10 โอห์มถึง 1 MOhm)

  • สายเชื่อมต่อ (เช่นชุดนี้เป็นชุดที่ดี)
  • คอมพิวเตอร์ส่วนบุคคลที่มีสภาพแวดล้อมการพัฒนา Arduino IDE
  • 1 คำอธิบายของอนุกรมอินเตอร์เฟซเอสพีไอ

    SPI - อินเทอร์เฟซอุปกรณ์ต่อพ่วงแบบอนุกรมหรือ "อินเทอร์เฟซอุปกรณ์ต่อพ่วงแบบอนุกรม"เป็นโปรโตคอลการถ่ายโอนข้อมูลแบบซิงโครนัสสำหรับการจับคู่ อุปกรณ์หลักกับ อุปกรณ์ต่อพ่วง (Slave). อุปกรณ์หลักมักเป็นไมโครคอนโทรลเลอร์ การสื่อสารระหว่างอุปกรณ์เกิดขึ้นผ่านสายสี่เส้น ซึ่งเป็นเหตุให้บางครั้ง SPI ถูกเรียกว่า "อินเทอร์เฟซแบบสี่สาย" เหล่านี้คือยาง:

    มีโหมดการถ่ายโอนข้อมูลสี่โหมด ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) เกิดจากการรวมขั้วของพัลส์นาฬิกา (เราทำงานที่ระดับ HIGH หรือ LOW) ขั้วนาฬิกา, CPOLและเฟสของพัลส์นาฬิกา (การซิงโครไนซ์บนขอบที่เพิ่มขึ้นหรือลดลงของพัลส์นาฬิกา) เฟสนาฬิกา, สพป.

    รูปนี้จะอธิบายตารางนี้

    อินเทอร์เฟซ SPI มีตัวเลือกมากมายสำหรับการเชื่อมต่ออุปกรณ์ทาส: เป็นอิสระและ น้ำตก. เมื่อเชื่อมต่ออย่างอิสระกับบัส SPI อุปกรณ์หลักจะเข้าถึงอุปกรณ์ทาสแต่ละตัวแยกกัน ด้วยการเชื่อมต่อแบบคาสเคด อุปกรณ์สเลฟจะทำงานทีละเครื่อง ราวกับอยู่ในคาสเคด


    ประเภทของการเชื่อมต่ออุปกรณ์สำหรับการทำงานผ่านอินเทอร์เฟซ SPI: อิสระและแบบเรียงซ้อน

    2 การใช้งานอินเทอร์เฟซ SPIบนบอร์ดตระกูล Arduino

    ใน Arduino บัสอินเตอร์เฟส SPI จะอยู่บนพอร์ตเฉพาะ แต่ละบอร์ดมีการกำหนดพินของตัวเอง เพื่อความสะดวก ข้อสรุปจะถูกทำซ้ำและแยกไว้ต่างหาก ขั้วต่อ ICSP(ในการเขียนโปรแกรมแบบอนุกรมของวงจร ให้เขียนโปรแกรมอุปกรณ์ที่รวมอยู่ในวงจรโดยใช้โปรโตคอลแบบอนุกรม) โปรดทราบว่าตัวเชื่อมต่อ ICSP ไม่มีพินการเลือกทาส - SS เพราะ สันนิษฐานว่า Arduino จะถูกใช้เป็นอุปกรณ์หลักในเครือข่าย แต่หากจำเป็น คุณสามารถกำหนดพินดิจิทัลของ Arduino เป็น SS ได้

    รูปนี้แสดงความสอดคล้องมาตรฐานของพินกับบัส SPI สำหรับ Arduino UNO และ Nano


    3 ห้องสมุดเพื่อการทำงานด้วยอินเทอร์เฟซ SPI

    มีการเขียนไลบรารีพิเศษสำหรับ Arduino ที่ใช้โปรโตคอล SPI มันเชื่อมต่อกันแบบนี้: ในตอนต้นของโปรแกรมที่เราเพิ่ม #รวมSPI.h.

    ในการเริ่มต้นใช้โปรโตคอล SPI คุณต้องตั้งค่าการตั้งค่า จากนั้นเริ่มต้นโปรโตคอลโดยใช้ขั้นตอน SPI.beginธุรกรรม(). คุณสามารถทำได้ด้วยคำสั่งเดียว: SPI.beginTransaction (การตั้งค่า SPIS (14000000, MSBFIRST, SPI_MODE0))

    ซึ่งหมายความว่าเราเริ่มต้นโปรโตคอล SPI ที่ความถี่ 14 MHz การส่งข้อมูลเกิดขึ้นโดยเริ่มจาก MSB (บิตที่สำคัญที่สุด) ในโหมด SPI_MODE0

    หลังจากการกำหนดค่าเริ่มต้น ให้เลือกอุปกรณ์สเลฟโดยย้ายพิน SS ที่เกี่ยวข้องไปที่สถานะ ต่ำ.

    จากนั้นเราถ่ายโอนข้อมูลไปยังอุปกรณ์ทาสด้วยคำสั่ง SPI.โอน().

    หลังจากการโอนเราจะคืน SS ให้กับรัฐ สูง.


    การทำงานกับโปรโตคอลเสร็จสิ้นด้วยคำสั่ง SPI.endธุรกรรม().

    ขอแนะนำให้ลดเวลาการถ่ายโอนระหว่างคำสั่ง SPI.beginTransaction() และ SPI.endTransaction() เพื่อหลีกเลี่ยงปัญหาหากอุปกรณ์อื่นพยายามเริ่มการถ่ายโอนข้อมูลโดยใช้การตั้งค่าที่แตกต่างกัน

    4 การเชื่อมต่อกะทะเบียนถึง Arduino

    พิจารณาการใช้งานอินเทอร์เฟซ SPI ในทางปฏิบัติ เราจะให้ไฟ LED สว่างขึ้นโดยการควบคุมรีจิสเตอร์กะ 8 บิตผ่านบัส SPI มาเชื่อมต่อกับ Arduino กันเถอะ กะทะเบียน 74HC595. เราจะเชื่อมต่อ LED ที่มีค่าระบุ 220 โอห์มกับเอาต์พุตรีจิสเตอร์ 8 ตัวแต่ละตัวผ่านตัวต้านทานแบบจำกัด แผนภาพแสดงในรูป


    5 ร่างสำหรับควบคุมการลงทะเบียนกะผ่านอินเทอร์เฟซ SPI

    มาเขียนภาพร่างแบบนี้กัน

    #รวม const int pinSelect = 8; // ลงทะเบียนเลือกพิน การตั้งค่าเป็นโมฆะ () ( SPI.เริ่มต้น(); // การเริ่มต้นอินเทอร์เฟซ SPI pinMode (pinSelect, OUTPUT); // digitalWrite (พินเลือก, ต่ำ); // เลือกอุปกรณ์ทาส (ลงทะเบียน) SPI.transfer (0); // ล้างเนื้อหาของการลงทะเบียน digitalWrite (pinSelect, HIGH); // สิ้นสุดการส่ง Serial.begin (9600); } เป็นโมฆะวน() (สำหรับ (int i=0; i )

    ขั้นแรก มาเชื่อมต่อไลบรารี SPI และเริ่มต้นอินเทอร์เฟซ SPI ลองกำหนดพิน 8 เป็นพินการเลือกทาส SS มาล้าง shift register โดยส่งค่า "0" ไปให้ เริ่มต้นพอร์ตอนุกรม

    หากต้องการให้ไฟ LED เฉพาะเจาะจงสว่างขึ้นโดยใช้ shift register คุณจะต้องใส่ตัวเลข 8 บิตกับอินพุต ตัวอย่างเช่นเพื่อให้ LED ตัวแรกสว่างขึ้นเราจะระบุเลขฐานสอง 00000001 สำหรับอันที่สอง - 00000010 สำหรับอันที่สาม - 00000100 เป็นต้น เมื่อแปลงเลขฐานสองเหล่านี้เป็นระบบเลขฐานสิบ จะเกิดลำดับต่อไปนี้: 1, 2, 4, 8, 16, 32, 64, 128 และเป็นเลขยกกำลังสองตั้งแต่ 0 ถึง 7

    ตามวัฏจักรนั้น วนซ้ำ()ขึ้นอยู่กับจำนวน LED เราคำนวณใหม่ตั้งแต่ 0 ถึง 7 ฟังก์ชั่น ธาร(ฐาน, องศา)ยกกำลัง 2 ให้กับตัวนับลูป ไมโครคอนโทรลเลอร์ทำงานไม่ถูกต้องนักกับตัวเลขประเภท "สองเท่า" ดังนั้นเราจึงใช้ฟังก์ชันการปัดเศษเพื่อแปลงผลลัพธ์เป็นจำนวนเต็ม กลม(). และเราโอนหมายเลขผลลัพธ์ไปยังทะเบียนกะ เพื่อความชัดเจน มอนิเตอร์พอร์ตอนุกรมจะแสดงค่าที่ได้รับระหว่างการดำเนินการนี้: หน่วย "ทำงาน" ผ่านการคายประจุ - ไฟ LED จะสว่างขึ้นเป็นคลื่น

    6 “รันนิ่งเวฟ”จากไฟ LED

    ไฟ LED จะสว่างขึ้นทีละดวง และเราสังเกตเห็น "คลื่น" ของไฟที่กำลังวิ่งอยู่ LED ถูกควบคุมโดยใช้ shift register ซึ่งเราเชื่อมต่อผ่านอินเทอร์เฟซ SPI เป็นผลให้ใช้พิน Arduino เพียง 3 พินเพื่อควบคุม LED 8 ดวงหากเราเชื่อมต่อ LED เข้ากับพอร์ตดิจิทัลของ Arduino โดยตรง เราจะต้องใช้พอร์ตแยกต่างหากสำหรับ LED แต่ละตัว

    เราศึกษาตัวอย่างที่ง่ายที่สุดของ Arduino ที่ทำงานกับบัส SPI เราจะพิจารณารายละเอียดเพิ่มเติมเกี่ยวกับการทำงานของการลงทะเบียนกะหลาย ๆ อันที่มีการเชื่อมต่อแบบอิสระและแบบเรียงซ้อนในบทความแยกต่างหาก