มีความแตกต่างระหว่างการใช้โมดูล SPI ในตัวและการกัดบิตหรือไม่?


25

มีความแตกต่างระหว่างทั้งสองหรือเป็นเพียงเรื่องของนามธรรม? สัญชาตญาณของฉันบอกว่าไม่มีความแตกต่าง แต่ฉันชอบที่จะผิด


1
ขึ้นอยู่กับว่าคุณเก่งแค่ไหน ดูcode.google.com/p/fastspiและwaitforbigo.com :-)
Robert Atkins

คำตอบ:


33

อุปกรณ์ต่อพ่วงตัวควบคุม SPI จริงใน MCU มักจะสามารถทำงานได้เร็วกว่าการกัดบิตของอินเตอร์เฟส แน่นอนมันขึ้นอยู่กับ MCU แต่ก็ไม่แปลกใจที่ฉันจะเห็นคอนโทรลเลอร์ SPI ทำงานที่ 30+ MHz ในขณะที่การกัดบิตอาจ จำกัด อยู่ที่ประมาณ 1 MHz (ถ้าคุณโชคดี)

แต่มีมากกว่านั้น เมื่อการชนบิต MCU กำลังยุ่งอยู่กับการทุบบิต กำลังเลื่อนข้อมูลออกและทวีคูณบรรทัด GPIO ความหมายมันไม่สามารถทำอะไรอย่างอื่นได้ เมื่อใช้คอนโทรลเลอร์ SPI ผู้ควบคุมไม่ว่างที่ทำทุกอย่างและ MCU มีอิสระที่จะทำสิ่งอื่นได้

ดังนั้นด้วยคอนโทรลเลอร์ SPI ที่แท้จริงการถ่ายโอน SPI จริงจึงเร็วกว่ามากและ MCU จะได้รับรอบกลับมาบ้างซึ่งมันสามารถใช้ทำสิ่งอื่น ๆ ได้


11

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

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


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

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

6

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

ด้วยเหตุนี้การฝัง SPI master ในเฟิร์มแวร์จึงค่อนข้างง่าย ฉันทำสิ่งนี้บ่อยครั้งเพื่อความสะดวกในการใช้พินบางตัวเมื่อไม่มีฮาร์ดแวร์ SPI ในตัวหรือไม่สามารถใช้เพื่อวัตถุประสงค์ดังกล่าวได้ไม่ว่าด้วยเหตุผลใดก็ตาม การทำต้นแบบ SPI ในเฟิร์มแวร์นั้นง่ายพอ ๆ กับที่ได้รับ

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

มีข้อดีบางประการในการทำต้นแบบ SPI ในเฟิร์มแวร์ ฮาร์ดแวร์ SPI บางครั้งก็น่าเบื่อเล็กน้อยในการกำหนดค่า มีปัญหาเสมอว่าควรจะเกิดอะไรขึ้นทันทีเมื่อเลือกทาสถูกยืนยัน บิตแรกถูกเขียนไปยังบรรทัดข้อมูลหรือไม่? เกิดอะไรขึ้นถ้านาฬิกาเริ่มต่ำและบรรทัดข้อมูลควรจะ latch บนขอบตก บางครั้งเรื่องนี้บางครั้งก็ไม่ได้ ด้วยเฟิร์มแวร์ SPI หลักคุณสามารถให้อภัยมากขึ้นและอาจใช้รูทีนเดียวกันสำหรับการสื่อสารกับทาสที่แตกต่างกัน ตัวอย่างเช่นคุณสามารถตรวจสอบให้แน่ใจว่าบรรทัดข้อมูล MOSI (Master Out Slave In) มีความเสถียรที่ขอบทั้งสองของนาฬิกา โดยทั่วไปแล้วฮาร์ดแวร์ SPI จะไม่ทำเช่นนั้นดังนั้นฮาร์ดแวร์ดังกล่าวจะต้องได้รับการกำหนดค่าอีกครั้งโดยขึ้นอยู่กับว่าอุปกรณ์ใดที่กำลังสื่อสารอยู่ในขณะนั้น

ข้อดีอีกประการของเฟิร์มแวร์หลัก SPI คือคุณสามารถเลือกจำนวนบิตตามลำดับ SPI ฮาร์ดแวร์มักจะถูก จำกัด ให้ทวีคูณของ 8 บิต อุปกรณ์ส่วนใหญ่ได้รับการออกแบบเพื่อให้สามารถถ่ายโอนข้อมูลได้ทั้งไบต์ แต่มักจะไม่ต้องการ ตัวอย่างเช่น 10 บิต A / D มีแนวโน้มที่จะส่งบิตข้อมูล 10 ก่อนจากนั้นส่ง 0 หรือขยะหลังจากนั้นถ้าคุณยังคงตอกบัตร หากใช้ฮาร์ดแวร์ SPI คุณจะถูกบังคับให้ถ่ายโอน 16 บิตและปิดบังขยะ ทุกอย่างจะทำงานได้ดี แต่เฟิร์มแวร์หลัก SPI อาจเร็วกว่าฮาร์ดแวร์ในกรณีนี้เนื่องจากการโอนเพียงขั้นต่ำ 10 บิตเท่านั้น

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

นั่นคือทั้งหมดจากมุมมองหลัก ในระยะสั้นมักจะมีข้อได้เปรียบเล็กน้อยในการใช้ฮาร์ดแวร์ SPI เป็นหลักและแม้แต่ข้อดีเล็กน้อยที่ไม่ได้ใช้งานในบางครั้ง อย่างไรก็ตามนั่นคือทั้งหมดที่แตกต่างกันสำหรับทาส ตั้งแต่นายควบคุมนาฬิกาทาสจะต้องพร้อมสำหรับสิ่งที่เจ้านายทำทุกครั้งที่นายทำ ข้อกำหนดเกี่ยวกับเวลามักจะค่อนข้างสั้นเมื่อเทียบกับเวลาสอนดังนั้นการมีฮาร์ดแวร์ที่ใช้ SPI Slave มักเป็นสิ่งที่คุณต้องการ

คุณสามารถทำทาส SPI ในเฟิร์มแวร์ แต่มันยุ่งยากคุณต้องนับวัฏจักรและเวลาแฝงอย่างระมัดระวังและโดยปกติแล้วคุณจะใช้โปรโตคอลย่อยที่คุณรู้ว่าต้นแบบของคุณใช้ ตัวอย่างเช่นครั้งหนึ่งฉันต้องออกแบบเทียบเท่าดิจิตอลของคอนโทรลเลอร์คอนโทรลเลอร์แบบอะนาล็อกเก่า (พวกเขาต้องการคุณสมบัติพิเศษที่ไม่สามารถทำได้อย่างสมเหตุสมผลในอะนาล็อกและพวกเขาต้องการบางสิ่งที่เล็กกว่าถูกกว่าเพื่อผลิตและมีเสถียรภาพมากขึ้น) บอร์ดนี้เชื่อมต่อกับส่วนที่เหลือของระบบผ่านบัส SPI บอร์ดอะนาล็อกเก่ามี D / A สองแชนเนลเพื่อตั้งค่าควบคุมและ A / D สองช่องเพื่ออ่านค่าที่วัดได้ การนำทั้งสองมาใช้ในตัวประมวลผลเดียวนั้นยุ่งยากและรวมถึงการหาว่าเซตย่อยของฮาร์ดแวร์ D / A และ A / D SPI โปรโตคอลที่ต้นแบบที่มีอยู่ใช้จริง นอกจากนี้ยังปรับปรุงโปรเซสเซอร์ซึ่งสามารถทำงานได้เร็วกว่าอัตรานาฬิกา SPI อย่างมาก ในท้ายที่สุดฉันใช้อินเทอร์รัปต์สามอันหนึ่งอันสำหรับการเลือกทาสแต่ละอันและอีกอันหนึ่งสำหรับขอบที่เพิ่มขึ้นของสายนาฬิกา สิ่งสุดท้ายที่ต้องมีการขัดจังหวะลำดับความสำคัญสูงสุดในระบบอื่นไม่สามารถตอบสนองความต้องการเวลาแฝง

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


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

@supe: ใช่นั่นเป็นปัญหา Slave SPI hardware จะไม่สนใจนาฬิกาและข้อมูลอินพุตและเก็บสายข้อมูลเอาท์พุทที่มีอิมพิแดนซ์สูงเมื่อเลือกชิพไม่ได้รับการยืนยัน แต่โดยปกติแล้วมันไม่ได้บอกคุณว่าขอบเขตการเลือกชิปอยู่ที่ใด อย่างน้อยที่สุดด้วยฮาร์ดแวร์ PIC SPI ที่ฉันจำได้ว่าใช้คุณจะต้องตั้งค่าการขัดจังหวะของคุณเองบนชิปที่เลือก
Olin Lathrop

ฉันสงสัยว่าคุณรู้จักการนำไปใช้ที่เหมาะสมหรือไม่ ฉันเดาว่าไม่. ปัญหาเกี่ยวกับการใช้การขัดจังหวะฮาร์ดแวร์บนสายสัญญาณที่เลือกคือหากการเปลี่ยนแปลงเกิดขึ้นในสายเลือกในไม่ช้าหลังจากที่ส่งไบต์แล้วทาสอาจมีปัญหาในการแก้ไขว่าเกิดขึ้นก่อนหรือหลังไบต์ที่มีปัญหา ฉันพบว่ามันทำให้งงว่าเกือบทุกชิปจะมีการติดตั้ง SPI Slave แต่ดูเหมือนว่าไม่มีใครสามารถใช้งานได้เหมือนอุปกรณ์ทาสฮาร์ดแวร์ SPI ทั่วไป สถานการณ์ค่อนข้างเหมือนกับพอร์ตสลาฟของตัวประมวลผลบน PIC เมื่อเทียบกับ 8048
supercat

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

+1 สำหรับการชี้ให้เห็นถึงความแตกต่างที่ทำให้เจ้านาย (บิต) และทาส (ยากขึ้น)
tcrosley

1

ขึ้นอยู่กับสิ่งที่คุณกำลังทำ SPI หากความสนใจของคุณได้รับอัตราการส่งข้อมูลสูงสุดฮาร์ดแวร์จะเร็วกว่าการกัดบิตเสมอ (เช่นชิป arm cortex ในวัย 3 ฉันสามารถส่งข้อมูลที่ 22Mbps โดยใช้การรองรับ SPI ของฮาร์ดแวร์เทียบกับ ~ 4.5Mbps พร้อมการบิตบิท ยังสามารถจัดการจำนวนบิตต่อการถ่ายโอนจาก 3-16 - มีประโยชน์เมื่อส่งข้อมูลออกเป็นชิ้น ๆ 12 บิตสำหรับคอนโทรลเลอร์ LED บางตัว!)) ในวันที่ 16Mhz ความแตกต่างคืออัตราการส่งข้อมูลสูงสุดที่น้อยมากกับฮาร์ดแวร์ที่ดูเหมือนว่าจะสูง 4 / ต่ำ 5Mbps ในขณะที่การ bitbanging ประมาณ 2.3Mbps)

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

ทั้งหมดข้างต้นขึ้นอยู่กับว่าฮาร์ดแวร์ SPI เป็นตัวเลือกหรือไม่


0

หากคุณใช้ SPI แบบบิตคุณจะไม่สามารถใช้ SSP เพื่อขัดจังหวะการติดต่อสื่อสารได้ นี่ไม่ใช่สิ่งสำคัญสำหรับ SPI สำหรับการใช้งานหลายอย่าง


1
ไม่มีการพูดถึงตัวประมวลผลเฉพาะดังนั้น "SSP ขัดจังหวะ" เป็นคำที่ไม่มีความหมายในบริบทนี้
Olin Lathrop
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.