UART หยุดหนึ่งหรือสองบิต?


15

UART มักให้คุณเลือกได้ระหว่าง 1, 1.5 และ 2 บิต ด้วยประสิทธิภาพของ payload 1 stop bit คือ 80% (8/10), 2 stop bits ที่ลดลงเป็น 72.7% (8/11) ดังนั้นข้อดีของบิตหยุดที่สองคืออะไร

คำตอบ:


19

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

ในกรณีที่ความเร็วแน่นและ UART ของคุณมีอัตราส่วนการหารเป็น 2 เท่านั้นการเพิ่มจุดหยุดพิเศษอาจเป็นตัวเลือกในการลดความเร็วที่รุนแรงน้อยกว่า baudrate ที่ต่ำที่สุดถัดไป

ฉันเชื่อว่านี่อาจเป็นเหตุผลหนึ่งที่มาตรฐาน DMX512 ระบุ 2 stopbits

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

ฉันยังพบสถานการณ์ที่การเดินสายเคเบิลที่ยาวมาก ๆ ทำให้เกิดความไม่สมดุลในเวลาขึ้นและลงทำให้ความยาวของจุดหยุดไม่เพียงพอ - การส่ง 2 สต็อปบิตและการรับเพียงต้องการแก้ไขสิ่งนี้


6

ในอีกไม่กี่วันที่ผ่านมาเครื่องพิมพ์ก็มีโครงสร้างเกือบทั้งหมด การรับส่งข้อมูลค่อนข้างเป็นมาตรฐานแม้ในขณะนั้นดังนั้นการเพิ่มบิตหยุดพิเศษจะทำให้เครื่องพิมพ์มีเวลาพิเศษในการพิมพ์อักขระ ด้านเวลานั้นชัดเจนมากขึ้นตั้งแต่นั้นมา สำหรับเครื่องพิมพ์เครื่องแรกที่มีเสียงดังhttp://en.wikipedia.org/wiki/Teletype_Model_33ฉันต้องแทรกตัวละครสองตัวชั่วคราวหลังจากส่ง Carriage Return


โมเดล 33 ที่ได้รับการปรับอย่างเหมาะสมต้องการเพียงหนึ่งตัวละครหลังจาก Carriage Return นั่นคือเวลาที่คุณควรจะส่ง Linefeed! ฉันลืมว่าพวกเขาต้องการ 2 stop bits แต่คุณพูดถูกและสิ่งที่ฉันพูดด้านล่างของคำตอบของ Russel ใช้ (แต่บิต 1.5 stop นั้นสำหรับฮาร์ดแวร์ Baudot) บิตหยุดพิเศษ (จาก 10ms) ไม่ได้ช่วยให้การคืนสินค้าล่าช้า แต่อย่างใด
gbarry

4

บิตหยุดสองบิตไม่น่าจะมีประโยชน์มากกว่าหนึ่งในระบบที่มีสัดส่วนของเวลาหยุดทำงานและทำงานในสภาพแวดล้อมที่มีเสียงรบกวนต่ำ (BER ต่ำ) เช่นภายในอุปกรณ์หรืออุปกรณ์ต่อพ่วงที่มีไม่กี่เมตร ของสายเคเบิลและ / หรือไม่มีระยะโมเด็ม - โมเด็ม

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

หากคุณมีสตรีมข้อมูลต่อเนื่องเป็นหลักหากไม่ซิงโครไนซ์บิตสูง ๆ จะมีลักษณะเป็นบิตหยุด การเปลี่ยนแปลงในระดับต่ำที่สูงจะมีลักษณะเป็นขอบเขตไบต์ หากผู้รับของคุณเริ่มต้นในขอบเขต 10 และมันไม่ใช่ขอบเขตการเริ่มต้นที่แท้จริงนี่จะถูกค้นพบเพียง 50% ของเวลา) (เช่นหากพบว่า "บิตหยุด" สุดท้ายจะเป็นบิตข้อมูลต่ำและคุณจะยัง ข้ามเขตแดนหยุด / เริ่มต้นของแท้ไปตามทางโดยเฉลี่ยแล้วคุณมีโอกาส 1/4 ของขอบเขตไบต์เท่ากับ 1/0 และดูเหมือนว่าเป็นคู่หยุด / เริ่มตู่ข้างต้นแสดงให้เห็นว่าหากคุณเลือกหยุดแบบผิดพลาด - เริ่มคู่แล้วอาจมีโอกาสประมาณ 50% ที่คุณจะเลือกอีกคู่หนึ่งในความพยายามต่อไปนี้

หากคุณใช้ 2 stop bits (11) ลำดับการหยุดที่ถูกต้องคือ 110 ซึ่งมีโอกาส 1 / 8th ที่เกิดขึ้นในการรับส่งข้อมูลแบบสุ่ม การผสมของ stop stop และ start ของแท้ใน flow ที่ไม่ซิงโครไนซ์จะเปลี่ยน sats เล็กน้อย แต่ดูเหมือนว่าไม่น่าเป็นไปได้ถ้าคุณได้รับ 110 stop / start sequence ในรอบเดียวที่คุณจะต้องลองอีกครั้ง ลำดับที่เกิดขึ้นต่อไป

ในขณะที่คุณสังเกตเห็นว่า 1 stop bit ให้ผลผลิต 8/10 = 80% ปริมาณงานสูงสุดและ 2 stop bits ให้ประสิทธิภาพ 8/11 = 72% ความแตกต่างของปริมาณงานที่ขีด จำกัด สูงสุดคือ 80% / 72% = ~ 11% นี่คือการได้รับประโยชน์ในสถานการณ์ที่รุนแรง แต่ไม่กว้างใหญ่และถ้าวงจรไม่ได้ใช้งานมากกว่า 10% ของเวลามันมีค่าน้อยที่สุด หากวงจรของคุณมีเสียงดังและมีแนวโน้มที่จะสูญเสียการซิงโครไนซ์เป็นครั้งคราวบิตหยุดพิเศษอาจช่วยได้มาก แต่ถ้าคุณสนใจมากเกี่ยวกับปริมาณงานคุณสามารถเพิ่มอัตราการรับส่งข้อมูล (ไม่เสมอไป) หรือเปลี่ยนเป็นการดำเนินการแบบซิงโครนัสอย่างสมบูรณ์


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

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

@gbarry - methinks thous't ค่อนข้าง stumbled ในความคิดเห็นของคุณ
รัสเซลแม็คมาฮอน

ที่จริงแล้วฉันหมดตัวละคร :) มีอะไรผิดปกติ?
gbarry

3

เพื่อขยายจุดของ mikeselectricstuff เกี่ยวกับการรับเวลาด้วย "soft UARTs" แอปพลิเคชั่นรับที่จะรู้เสมอว่าเมื่อใดที่จะรับข้อมูลและการทำเช่นนั้นบนพื้นฐานการสำรวจสามารถจัดการอัตราการรับส่งข้อมูลได้เร็วกว่า อย่างไรก็ตามแอปพลิเคชันดังกล่าวสามารถประมวลผลข้อมูลขาเข้าในช่วงเวลาระหว่างจุดเริ่มต้นของบิตหยุดหนึ่งไบต์และบิตเริ่มต้นถัดไปของไบต์ เวลาที่ใช้ในการประมวลผลแต่ละไบต์สิ้นสุดลงเป็นปัจจัย จำกัด ความเร็วในการสื่อสาร การประมวลผลข้อมูลที่ 115,200-N-8-2 นั้นไม่ได้เรียกร้องมากไปกว่าการประมวลผลที่ 57,600-N-8-1 แต่มันเร็วกว่า 80%

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


นอกจากนี้คุณยังสามารถ soft-UART high baudrates (250K ขึ้นไป) โดยการขัดจังหวะบนขอบเริ่มต้นและอยู่ภายในโค้ดขัดจังหวะสำหรับไบต์ทั้งหมด - stopbit พิเศษมีประโยชน์มากที่นี่
mikeselectricstuff

@mikeselectricstuff: บิตหยุดพิเศษอาจมีประโยชน์มากเนื่องจากสามารถใช้เพียงบางส่วนของบิตในแต่ละไบต์ (กำหนดให้ LSB ของแต่ละไบต์ตั้งค่าไว้จะมีประโยชน์เพราะสามารถกำหนดเวลาจากขอบที่สูงขึ้นของบิตนั้นได้ หากอาจมีการตกเล็กน้อยในเมื่อการขัดจังหวะเกิดขึ้น) ข้อ จำกัด ที่สำคัญของวิธีการแบบบิตอินเตอร์รัปต์ทริกเกอร์เมื่อเริ่มบิตคือว่าไม่มีวิธีที่ดีในการส่งข้อมูลในขณะที่ข้อมูลขาเข้าอาจมาถึง ข้อมูลที่ส่งหรือข้อมูลที่ได้รับ (หรือทั้งสองอย่าง) กำลังจะสูญหาย
supercat

2

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

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

สำหรับวัตถุประสงค์อื่นเช่นอนุญาตให้แคร่พิมพ์กลับไปที่จุดเริ่มต้นของบรรทัดใหม่ CR, LF บวกสอง rubouts ถูกส่งไป (รูทั้งหมดบนเทป 8 ระดับ)

มันเป็นธรรมเนียมสำหรับวงจรที่ทำงานด้วยความเร็ว 110 Baud และช้ากว่าเท่านั้น


1

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

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