ทำไมไมโครคอนโทรลเลอร์บางตัวถึงมีความล่าช้าในการซิงโครไนซ์อย่างมาก?


11

ในไมโครคอนโทรลเลอร์ Atmel SAM-D21 ซีรีย์อุปกรณ์ต่อพ่วงจำนวนมากใช้นาฬิกาที่ไม่ตรงกันกับนาฬิกาซีพียูหลักและการเข้าถึงอุปกรณ์ต่อพ่วงเหล่านี้ต้องผ่านตรรกะการซิงโครไนซ์ บนอุปกรณ์ต่อพ่วงที่มีนาฬิกาช้าเมื่อเทียบกับเวลา CPU สิ่งนี้สามารถเพิ่มความล่าช้าได้อย่างมาก ตัวอย่างเช่นหาก RTC ได้รับการกำหนดค่าให้ใช้นาฬิกา 1024Hz (ตามความตั้งใจในการออกแบบ) และ CPU ทำงานที่ 48Mhz การอ่านการลงทะเบียน "เวลาปัจจุบัน" จะทำให้ตรรกะบัสแทรกมากกว่า 200,000 สถานะรอ (ขั้นต่ำ ห้ารอบของนาฬิกา 1024Hz) แม้ว่าจะเป็นไปได้ที่ CPU จะร้องขอการอ่านให้รันโค้ดที่ไม่เกี่ยวข้องอื่น ๆ และส่งคืน 200,000 รอบในภายหลังเพื่อดึงเวลา แต่ดูเหมือนว่าจะไม่มีวิธีใดที่จะอ่านเวลาได้เร็วขึ้น

ด้วยความเข้าใจในการซิงโครไนซ์วงจรการซิงโครไนซ์แบบบิตเดียวจะทำให้สัญญาณล่าช้า 2-3 รอบของนาฬิกาปลายทาง การซิงโครไนซ์ปริมาณหลายบิตจะยากขึ้นเล็กน้อย แต่มีวิธีการมากมายที่สามารถรับประกันพฤติกรรมที่เชื่อถือได้ภายในห้ารอบของนาฬิกาปลายทางถ้ามันเร็วกว่านาฬิกาต้นทางและอีกไม่กี่รอบเท่านั้นหากไม่ใช่ Atmel SAM-D21 จะทำอะไรที่จะต้องใช้รอบหกรอบในโดเมนสัญญาณต้นทางสำหรับการซิงโครไนซ์และปัจจัยใดที่จะสนับสนุนการออกแบบที่การซิงโครไนซ์ล่าช้านั้นนานพอที่จะทำให้เกิดการขัดจังหวะ ความล่าช้าในการซิงโครไนซ์สั้นพอที่จะทำให้การขัดจังหวะเช่นนั้นไม่จำเป็น?


2
ขอบคุณสำหรับคำถามนี้ มันทำให้ฉันในที่สุดเข้าใจปัญหาที่มือของฉัน ฉันมาที่นี่เพราะฉันไม่เข้าใจว่าทำไมการล้างตัวจับเวลา Watchdog (WDT) จะใช้เวลาเกือบ 5 มิลลิวินาทีอย่างมหาศาลใน SAMD20 / 21 ตอนนี้ฉันรู้ว่ามันเกิดจากการออกแบบฮาร์ดแวร์ไม่ใช่ข้อผิดพลาดของฉัน (WDT ถูกโอเวอร์คล็อกที่ 1024 Hz ซึ่งเป็นตัวเลือกที่สมเหตุสมผลเท่านั้น) ตอนนี้ฉันสามารถจัดการกับมันได้อย่างน้อย
T-Bull

2
@ T-Bull: สิ่งที่สนุกจริงๆเกี่ยวกับสุนัขเฝ้าบ้านในส่วนเหล่านั้นคือมันถูกปิดการใช้งานระหว่างซอฟต์แวร์เวลาออกคำสั่งรีเซ็ตและเวลาที่คำสั่งผ่านซิงโครไนซ์ หากอุปกรณ์เข้าสู่โหมดสลีปในช่วงเวลานั้นจ้องจับผิดจะไม่ทำงานเว้นแต่จะมีอย่างอื่นตื่นขึ้นมา
supercat

คำตอบ:


2

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

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

อีกทางเลือกหนึ่งคือให้คุณอัดคำสั่งจำนวนมากที่สุดในเวลาตื่นนอนแทนที่จะหมุนหกรอบและรอการเขียนทุกครั้ง

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

ฉันเดาว่านั่นไม่ใช่คำตอบที่ชัดเจน แต่เป็นความคิดของฉันหลังจากดูในแผ่นข้อมูลเล็กน้อย


2
"หกรอบ" คือหกรอบของนาฬิกาต่อพ่วง ถ้าหนึ่งชุดเช่นโมดูลนาฬิกาเรียลไทม์ที่จะป้อนที่ 1024Hz (ซึ่งดูเหมือนว่าจะเป็นคำแนะนำของ Atmel) และนาฬิกา CPU อยู่ที่ 48MHz, หกรอบของนาฬิกาต่อพ่วงจะเป็น 281,250 รอบของนาฬิกา CPU ซึ่งยาวมาก เวลาที่จะหมุนโดยเฉพาะอย่างยิ่งหากมีการขัดจังหวะใด ๆ ที่จำเป็นต้องให้บริการ การหมุนค่อนข้างน่ากลัวในระดับปานกลางหากนาฬิกาช้าคือ 8Mhz (หมายถึงสปิน 36-CPU-cycle) แต่ความผิดพลาดอย่างหนักจะดีกว่าการหมุนในนาฬิกา 1024Hz
supercat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.