มีความแตกต่างระหว่างทั้งสองหรือเป็นเพียงเรื่องของนามธรรม? สัญชาตญาณของฉันบอกว่าไม่มีความแตกต่าง แต่ฉันชอบที่จะผิด
มีความแตกต่างระหว่างทั้งสองหรือเป็นเพียงเรื่องของนามธรรม? สัญชาตญาณของฉันบอกว่าไม่มีความแตกต่าง แต่ฉันชอบที่จะผิด
คำตอบ:
อุปกรณ์ต่อพ่วงตัวควบคุม SPI จริงใน MCU มักจะสามารถทำงานได้เร็วกว่าการกัดบิตของอินเตอร์เฟส แน่นอนมันขึ้นอยู่กับ MCU แต่ก็ไม่แปลกใจที่ฉันจะเห็นคอนโทรลเลอร์ SPI ทำงานที่ 30+ MHz ในขณะที่การกัดบิตอาจ จำกัด อยู่ที่ประมาณ 1 MHz (ถ้าคุณโชคดี)
แต่มีมากกว่านั้น เมื่อการชนบิต MCU กำลังยุ่งอยู่กับการทุบบิต กำลังเลื่อนข้อมูลออกและทวีคูณบรรทัด GPIO ความหมายมันไม่สามารถทำอะไรอย่างอื่นได้ เมื่อใช้คอนโทรลเลอร์ SPI ผู้ควบคุมไม่ว่างที่ทำทุกอย่างและ MCU มีอิสระที่จะทำสิ่งอื่นได้
ดังนั้นด้วยคอนโทรลเลอร์ SPI ที่แท้จริงการถ่ายโอน SPI จริงจึงเร็วกว่ามากและ MCU จะได้รับรอบกลับมาบ้างซึ่งมันสามารถใช้ทำสิ่งอื่น ๆ ได้
ไม่มีความแตกต่างในแง่ที่คุณสามารถบรรลุผลลัพธ์เดียวกันโดยใช้ทั้งสองวิธี แต่มีเหตุผลสองสามข้อที่คุณจะเลือกวิธีอื่น
การใช้อุปกรณ์ต่อพ่วง SPI จะช่วยให้โปรเซสเซอร์ไม่ต้องกังวลเกี่ยวกับการสร้างเวลาสำหรับบิตการกระแทก I / O พินช่วยให้สามารถทำงานอื่น ๆ ในการคำนวณและทำให้การโปรแกรมซีพียูของคุณง่ายขึ้น เนื่องจากอุปกรณ์ต่อพ่วงมีการใช้งานในฮาร์ดแวร์มันจะทำงานได้เร็วขึ้นและใช้พลังงานน้อยกว่า I / O ที่มีการต่อบิต อาจมีบางกรณีที่คุณต้องการบิต I / O บิตเพื่อเชื่อมต่อกับ SPI หากแอปพลิเคชันของคุณต้องการให้คุณเลือกโปรเซสเซอร์ที่ไม่มีอุปกรณ์ต่อพ่วง SPI เพื่อเหตุผลด้านสุขภาพผมขอแนะนำให้หลีกเลี่ยงสิ่งนั้นหากจำเป็น
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 หากความสนใจของคุณได้รับอัตราการส่งข้อมูลสูงสุดฮาร์ดแวร์จะเร็วกว่าการกัดบิตเสมอ (เช่นชิป arm cortex ในวัย 3 ฉันสามารถส่งข้อมูลที่ 22Mbps โดยใช้การรองรับ SPI ของฮาร์ดแวร์เทียบกับ ~ 4.5Mbps พร้อมการบิตบิท ยังสามารถจัดการจำนวนบิตต่อการถ่ายโอนจาก 3-16 - มีประโยชน์เมื่อส่งข้อมูลออกเป็นชิ้น ๆ 12 บิตสำหรับคอนโทรลเลอร์ LED บางตัว!)) ในวันที่ 16Mhz ความแตกต่างคืออัตราการส่งข้อมูลสูงสุดที่น้อยมากกับฮาร์ดแวร์ที่ดูเหมือนว่าจะสูง 4 / ต่ำ 5Mbps ในขณะที่การ bitbanging ประมาณ 2.3Mbps)
นอกจากนี้หากคุณใช้การสนับสนุนฮาร์ดแวร์อีกครั้งขึ้นอยู่กับตัวควบคุมขนาดเล็กที่เป็นปัญหาคุณมีตัวเลือกให้คุณใช้ตัวควบคุม DMA เพื่อเปลี่ยนข้อมูลของคุณปล่อยให้รหัสของคุณกลับไปที่สิ่งอื่น ๆ ที่น่าสนใจมากกว่าการดูแลข้อมูล เขียน.
ทั้งหมดข้างต้นขึ้นอยู่กับว่าฮาร์ดแวร์ SPI เป็นตัวเลือกหรือไม่
หากคุณใช้ SPI แบบบิตคุณจะไม่สามารถใช้ SSP เพื่อขัดจังหวะการติดต่อสื่อสารได้ นี่ไม่ใช่สิ่งสำคัญสำหรับ SPI สำหรับการใช้งานหลายอย่าง