สอง UARTS รู้ได้อย่างไรว่าอัตราการรับส่งข้อมูลใดที่จะใช้


14

ฉันกำลังอ่านเกี่ยวกับโปรโตคอลมาตรฐานสำหรับ UART และฉันคิดว่าถ้า UART ที่ได้รับไม่มีความคิดใด ๆ เกี่ยวกับอัตราการรับส่งข้อมูลที่ส่งข้อมูลจะมีปัญหามากมาย หากอัตราการรับส่งข้อมูลสันนิษฐานว่าต่ำกว่าอัตราการส่งข้อมูลที่ส่งข้อมูลจะมีบิตที่ไม่สามารถเห็นได้โดย UART ที่ได้รับ ในทางตรงกันข้ามถ้าอัตรารับส่งข้อมูลที่ใช้โดยผู้รับสูงกว่าอัตรารับส่งข้อมูลที่มีการส่งข้อมูลจะมีบิตที่จะถูกนับสองครั้งและจะส่งผลให้ข้อมูล 'อ่าน' ไม่ถูกต้อง

ความรู้ของฉันเกี่ยวกับ UART คือเมื่อบรรทัดไม่ได้ใช้งานมันจะถูกเก็บไว้ที่ '1' บิตเริ่มต้นคือ '0' และ Stop bit คือ '1' นอกจากนี้บิตหยุดเป็น '1' ไม่มีความแตกต่างใด ๆ กับ '1' เมื่อสายไม่ได้ใช้งานหรือมีวิธีการแยกความแตกต่างหรือไม่

สองคนสื่อสารกันถึงข้อตกลงแรกของ UART ที่จะใช้อัตรารับส่งข้อมูลหรือไม่? ถ้าใช่พวกเขาจะทำอย่างไร


"stop bit" อาจถูกเรียกว่า "return to idle state" อย่างเท่าเทียมกัน แต่ด้วยการทำให้บิตมีความยาวขั้นต่ำที่กำหนดไว้ แต่หลังจากนั้นรับประกันเวลาขั้นต่ำบรรทัดจะยังคงอยู่ในสถานะ "1" ตัวละครต่อไปมาพร้อม
Peter Bennett

พวกเขาสามารถเปลี่ยนอัตราการรับส่งข้อมูลแบบสุ่มได้จนกว่าจะมีบางอย่างทำงาน XD
Bradman175

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

@infix ดังนั้นหากฉันวางแผนที่จะแก้ไขหรือสร้างรหัส Verilog สำหรับ UART ฉันสามารถทำได้เพื่อที่จะตรวจจับลำดับ 'AT' นี้และปรับอัตราการส่งข้อมูลได้จากที่นั่น ฉันกำลังคิดว่าจะกำหนดค่าเริ่มต้นด้วยอัตรารับส่งข้อมูลสูงสุดเพื่อที่จะจับทุกอย่างจากที่นั่นค้นหาลำดับ 'AT'
Batibot323

โพรโทคอลการสื่อสารที่ใช้ UART (ชื่อเป็น LIN) ซึ่งสามารถเห็นได้มากในอุตสาหกรรมยานยนต์มีกลไกการตรวจจับการรับส่งข้อมูลอัตโนมัติ แต่ยังคงโหนดหลักและโหนดทาส "ต้อง" จับคู่ในแง่ของความยาวข้อมูลและบิตหยุดยาว ซึ่งหมายความว่าการตรวจจับอัตราการรับส่งข้อมูลเท่านั้นไม่เพียงพอ
Rohat Kılıç

คำตอบ:


26

UART สามัญต้องได้รับการกำหนดค่าล่วงหน้าด้วยอัตรารับส่งที่ต้องการ (รวมถึงความยาวของคำ, บิตหยุด, พาริตี้ ฯลฯ ) ตามธรรมเนียมโดยมนุษย์

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

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


2
สมมติฐานของฉันเกี่ยวกับการตรวจจับการรับส่งข้อมูลอัตโนมัติอาจเป็นตัวจับเวลาและตัวนับการทำงานพร้อมกันเพื่อค้นหาขอบและเวลาระหว่างขอบ?
ammar.cma

1
ปัญหาคือไม่มีอัลกอริธึมที่สามารถใช้รูปแบบของคลื่น "uart serial" แบบ arbitary และตรวจสอบ baudrate ได้อย่างน่าเชื่อถือ คุณสามารถค้นหาเวลาต่ำสุดระหว่างช่วงการเปลี่ยนภาพได้ง่ายพอ แต่ไม่ได้แสดงช่วงเวลาบิตเพียงเล็กน้อย
Peter Green

มีอัลกอริทึมอยู่ (ฉันเคยได้ยินชื่อ "auto-bauding" ในหลาย ๆ ที่) แต่เมื่อนำไปใช้ในขอบเขตที่ จำกัด ทรัพยากรของชิป UART บางครั้งวิธีเดียวที่จะทำได้คือการใช้ข้อมูลที่ส่งมาบางส่วนและ ใช้สำหรับการสอบเทียบที่จะคงอยู่สำหรับส่วนที่เหลือของเซสชัน สิ่งนี้มักไม่เป็นที่ต้องการ หากทำในซอฟต์แวร์และอนุญาตให้ใช้เวลาในการตอบสนองเล็กน้อยมันเป็นเรื่องเล็กน้อยที่จะทำเช่นนี้โดยไม่ต้องใช้ข้อมูล (โดยเก็บไว้ชั่วคราวเพื่อการวิเคราะห์) อย่างน้อยสำหรับความเร็วต่ำ comms (น้อยกว่า 200KB / s) ความเร็วที่สูงขึ้นนำเสนอปัญหาเพิ่มเติม
Wossname

8

"ตกลง" UARTS สองตัวบนอัตราการรับส่งข้อมูลโดยใช้เอกสารประกอบและโดยผู้ปฏิบัติงาน / ผู้ใช้การตั้งค่าอัตรารับส่งข้อมูลด้วยมือรวมถึงโปรโตคอลการจับมือกันขนาดหยุดบิตเป็นต้น


1
..... สำหรับปลายทั้งสองของส่วนต่อประสาน
Michael Karas

2

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

ฉันรู้ว่า USB, SATA และโปรโตคอลข้อมูลสมัยใหม่อื่น ๆ ส่วนใหญ่เริ่มต้นหลังจากเหตุการณ์การรีเซ็ตหรือการเริ่มต้นที่ความเร็วต่ำที่สุดด้วยการกำหนดค่าเริ่มต้นที่เป็นมาตรฐานและเจรจากับคนอื่น ๆ (หรือเพียงแค่ต้นแบบขึ้นอยู่กับโปรโตคอล) . บางตัวก็ใช้ตัวต้านทานแบบดึงขึ้นหรือลงในสายข้อมูล / กำลังไฟเพื่อระบุความเร็วที่รองรับ

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

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