ความเร็วสัญญาณนาฬิกาของตัวรับสัญญาณ UART


14

ฉันพยายามทำความเข้าใจพื้นฐานของ UART เป็นที่เข้าใจกันว่า

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

คำถามที่นี่

ว่ากันว่าโดยทั่วไปนาฬิกาขนาด16Xจะใช้อัตราบิตในการกู้คืนข้อมูล ดังนั้นการแปลงbpsเป็นความถี่นาฬิกาเป็นไปได้อย่างไร โปรดให้ข้อมูลอ้างอิงบางอย่างแก่ฉันเพื่อศึกษากลไกการตอกบัตรที่ใช้ในตัวรับ UART

คำตอบ:


18

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

T0T0T0×T0เป็นขอบตกของบิตเริ่มต้น ในขณะที่การสุ่มตัวอย่างบิตเริ่มไม่จำเป็นจริงๆ (คุณรู้ว่ามันต่ำ) มันมีประโยชน์ที่จะตรวจสอบให้แน่ใจว่าขอบเริ่มต้นไม่ได้ขัดขวาง

ป้อนคำอธิบายรูปภาพที่นี่

×

ถ้าฉันจำได้อย่างถูกต้อง 68HC11 เอาตัวอย่างมาสองสามตัวที่จุดเริ่มต้นตรงกลางและตอนท้ายบิตคนแรกและคนสุดท้ายสันนิษฐานว่าจะซิงค์อีกครั้งหากมีการเปลี่ยนแปลงระดับ (ซึ่งไม่รับประกัน)

นาฬิกาตัวอย่างไม่ได้มาจากอัตราบิต แต่เป็นอีกวิธีหนึ่ง สำหรับ 9600 bps คุณจะต้องตั้งนาฬิกาสุ่มตัวอย่างเป็น 153 600 Hz ซึ่งคุณจะได้รับพรีสเกลเลอร์จากความถี่สัญญาณนาฬิกาของไมโครคอนโทรลเลอร์ จากนั้นบิตนาฬิกาจะได้รับจากส่วนนั้นอีก 16 ส่วน

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

ป้อนคำอธิบายรูปภาพที่นี่

นาฬิกาของผู้รับช้า 6.25% และคุณจะเห็นว่าการสุ่มตัวอย่างสำหรับทุก ๆ บิตถัดไปจะเป็นในภายหลังและภายหลัง การส่งสัญญาณ UART ทั่วไปประกอบด้วย 10 บิต: 1 บิตเริ่ม, ส่วนข้อมูล 8 บิตและ 1 บิตหยุด จากนั้นถ้าคุณสุ่มตัวอย่างในช่วงกลางของบิตคุณสามารถที่จะเป็นครึ่งบิตที่บิตสุดท้ายบิตหยุด ครึ่งหนึ่งในสิบบิตคือ 5% ดังนั้นการเบี่ยงเบน 6.25% ของเราเราจะพบปัญหา นั่นแสดงให้เห็นอย่างชัดเจนในภาพ: แล้วที่บิตข้อมูลที่สามเราสุ่มตัวอย่างใกล้ขอบ


ฉันขอขอบคุณความช่วยเหลือ ขอบคุณ !!. บิตตัวอย่างไม่ควรเริ่มต้นที่ T0 + 104us แทนที่จะเป็น T0 + 52us?
Vivek Maran

1
@ Vivek27 - ไม่เพราะ 104 เราเป็นช่วงเวลาของบิตเริ่มต้นและจากนั้นคุณจะสุ่มตัวอย่างในตอนท้ายของมันแทนที่จะอยู่ตรงกลาง ถ้าคุณให้ฉันสองสามนาทีฉันจะอัปเดตรูปภาพของฉัน :-)
stevenvh

1
@Vivek: จริงๆแล้วบิตเริ่มต้นนั้นไม่ได้ "สุ่มตัวอย่าง" เลย จุดประสงค์ทั้งหมดของมันคือเพื่อให้การเปลี่ยนแปลงเริ่มต้นจาก idle ที่ว่างของอักขระที่เหลือนั้นสัมพันธ์กับ มันคือ "คุณค่า" อยู่ตรงข้ามกับสายที่ไม่ได้ใช้งานเสมอและไม่ได้มีข้อมูลใด ๆ
Olin Lathrop

7
@Olin - ฉันจะสุ่มตัวอย่างเริ่มต้นเพียงเพื่อตรวจสอบว่าขอบเริ่มต้นไม่ได้ขัดขวาง
stevenvh

1
@downvoter - หากคุณจะบอกเราว่ามีอะไรผิดปกติฉันอาจแก้ไขได้ แต่แล้วคุณจะต้องบอกเราบางสิ่งบางอย่าง (คุณหนึ่งเดียวกันที่ยัง downvoted คำตอบอื่น ๆ ของฉันในวันนี้?)
stevenvh

11

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

เมื่อไม่ส่งสัญญาณสายจะถูกทิ้งให้อยู่ในสถานะว่าง ในการส่งไบต์ (ตัวอย่างเช่นความกว้างของข้อมูลอื่น ๆ ที่เป็นไปได้) เครื่องส่งจะส่งบิตเริ่มต้นก่อน เครื่องรับใช้เวลาของขอบนำของบิตเริ่มต้นและอัตราการรับส่งข้อมูลที่รู้จักแล้วจึงถอดรหัสส่วนที่เหลือของตัวละคร สมมติว่าความเรียบง่ายที่ใช้ 100 kBaud ซึ่งหมายความว่าแต่ละบิตเวลามีความยาว 10 .s ซึ่งรวมถึงบิตเริ่มต้นบิตข้อมูลและบิตหยุด ดังนั้นจุดกึ่งกลางของบิตข้อมูลแรกจะอยู่ที่ 15 µs หลังจากขอบนำของบิตเริ่มต้นที่สองที่ 25 etc.s เป็นต้น

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

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

อย่างไรก็ตามมันไม่ง่ายอย่างนั้น ในสถานการณ์ที่อธิบายไว้ข้างต้นตัวรับเริ่มต้นเป็นตัวจับเวลาที่ขอบนำของบิตเริ่มต้น ในทางทฤษฎีแล้วสามารถทำได้ในอุปกรณ์อิเล็กทรอนิกส์แบบอะนาล็อก แต่จะซับซ้อนและมีราคาแพงและไม่สามารถรวมเข้ากับชิปดิจิทัลได้อย่างง่ายดาย แต่การใช้งาน UART แบบดิจิตอลส่วนใหญ่จะมีนาฬิกาภายในที่ทำงานที่อัตรา 16x ที่คาดไว้ "นาฬิกาจับเวลา" จากนั้นนับรอบ 16x เหล่านี้ นั่นหมายความว่ามีข้อผิดพลาดเพิ่มเติมที่เป็นไปได้ของการเพิ่มบิต 1/16 บิตในการสุ่มตัวอย่างบิตทั้งหมดซึ่งเป็นอีก 0.7% นาฬิกาไม่ตรงกันที่บิตสุดท้าย

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

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

การใช้ 8-N-1 ข้อมูล 8 บิตนั้นใช้เวลาในการส่ง 10 บิต นี่คือเหตุผลหนึ่งที่มีความแตกต่างระหว่าง "อัตราบิต" และ "อัตราการส่งข้อมูล" อัตรารับส่งข้อมูลหมายถึงเวลาการส่งสัญญาณบิตแต่ละรายการรวมถึงบิตเริ่มต้นและหยุด ที่ 100 kBaud แต่ละบิตที่ส่งจะใช้เวลา 10 ,s รวมถึงบิตเริ่มต้นและหยุด อักขระทั้งหมดจึงใช้เวลา 100 buts แต่มีการถ่ายโอนข้อมูลจริงเพียง 8 บิต อัตรารับส่งข้อมูลคือ 100 k แต่อัตราบิตการถ่ายโอนข้อมูลจากมุมมองของระดับที่สูงขึ้นเพียง 80 kBits / s


5

อัตราบิตสำหรับการส่งข้อมูลคืออัตรานาฬิกาหารด้วย (ตามที่คุณพูดโดยทั่วไป) 16. คุณมีบิตที่ไม่ใช่ข้อมูลสำหรับบิตเฟรม (เริ่ม, พาริตี, หยุด) ดังนั้นสำหรับนาฬิกา 16000Hz คุณจะได้รับ 1,000 บิตต่อวินาที แต่หลังจากบิตการกำหนดเฟรมขั้นต่ำถูกแทรกเพียง 800 บิตข้อมูลหรือ 100 ไบต์ต่อวินาที

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

ตราบใดที่นาฬิกาตัวรับสัญญาณอยู่ใกล้กับอัตราของนาฬิกาตัวส่งสัญญาณการสุ่มตัวอย่างจะกระทบส่วนที่ถูกต้องของสัญญาณที่ส่ง

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