พัลส์ RX ลึกลับบน UART เชื่อมต่อกับ OS X Arduino Due


14

Arduino IDE 1.6.8, Arduino Due, Mac OS 10.11.3

ฉันเห็นพัลส์ลึกลับแปดตัวบนสาย RX เมื่อฉันเชื่อมต่อกับพอร์ตอนุกรมโดยใช้ไคลเอนต์ไลบรารีหลายแห่ง (Python, JavaScript รวมถึง Serial Monitor ในตัวใน IDE) ประมาณ 78-79us คนละ 1 ตัวอย่างที่ 1 มิลลิวินาที / วินาทีพร้อมกับ Logic Pro 16

พัลส์ลึกลับ

พัลส์แปดตัวเหล่านี้เมื่อตีความที่ 57600 baud จะทำให้เฟิร์มแวร์ Firmata ติดขัด และพวกเขาเกิดขึ้นในทุกการเชื่อมต่อ

นี่คือการใช้การติดตั้งใหม่ของ Arduino 1.6.8 IDE และมีหลายร่าง (ร่าง "Blink" ปกติจะทำซ้ำเช่นนี้)

ทำซ้ำขั้นตอนในเครื่องของฉัน:

  1. ติดตั้งภาพร่างใด ๆ
  2. เริ่มตัววิเคราะห์เชิงตรรกะถ้าคุณต้องการจับมัน
  3. ไปที่การตรวจสอบแบบอนุกรม ฉันมีการกำหนดค่าของฉันสำหรับ 57600 baud ซึ่งขึ้นบรรทัดใหม่ตอนจบ แต่ก็ไม่สำคัญ
  4. ถ้าคุณต้องการปิดและทำซ้ำขั้นตอนที่ 3
  5. หมายเหตุกะพริบทุกครั้งที่คุณเชื่อมต่อกับพอร์ตอนุกรม

มีข้อเสนอแนะสำหรับการวินิจฉัยสิ่งนี้หรือไม่? ดูเหมือนว่าจะเป็นระดับไดรเวอร์ต่อเนื่อง


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

1
ในแง่ของการติดตามแหล่งที่มามันจะเป็นประโยชน์ในการลองโปรแกรมไคลเอนต์แบบอนุกรมอีกเครื่องคอมพิวเตอร์ / ระบบปฏิบัติการอื่นอุปกรณ์ USB แบบอนุกรมอื่น ๆ ...
Chris Stratton

1
สำหรับการลองใช้โปรแกรมอนุกรมอื่น ๆ มีหลายไลบรารีที่ทำงานกับโปรโตคอล Firmata และใช้การใช้งานอนุกรมที่แตกต่างกัน (Python, JavaScript และการสร้าง Arduino IDE Serial Monitor) ที่แสดงพฤติกรรมแบบเดียวกัน แผนต่อไปของฉันคือการลองสิ่งนี้บนเครื่อง Linux และดูว่าฉันเห็นลักษณะการทำงานเดียวกันหรือไม่ซึ่งหวังว่าจะแยกได้หากนี่เป็น OS X เฉพาะ
Blake Ramsdell

2
คุณจะได้รับเมื่อคุณตัดการเชื่อมต่อ อัตราการเชื่อมต่อไม่มีผลต่อความยาวของพัลส์ ความสงสัยของฉันคือมันเป็นเฟิร์มแวร์ของ ATMega16U2 ที่กำลังทำอยู่ (หรือชิปใด ๆ ที่อยู่ในรุ่นใดก็ตาม)
Majenko

1
เมื่อคุณเริ่มมอนิเตอร์แบบอนุกรมซอฟต์แวร์จะรีเซ็ตโมดูล arduino หากโมดูล arduino มี bootloader อยู่ภายในฉันคิดว่านี่เป็นสัญญาณโปรโตคอล STK500
Mert Gülsoy

คำตอบ:


1

สั้น:

ดูเฟิร์มแวร์ ATMEGA16U2 ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/ฉันพบว่าเมื่อคุณกำหนดค่า / เปลี่ยนแปลงการตั้งค่าของ พอร์ตอนุกรม USB จำลองแล้ว USART จะถูกรีเซ็ต สิ่งนี้เกิดขึ้นแม้ว่าคุณจะเปิด Arduino Serial Monitor (มันต้องกำหนดค่าความเร็วอนุกรม ฯลฯ ) นี่เป็นสาเหตุที่ขัดขวางคุณ

ยาว:

ดูฟังก์ชั่น:

void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)

ที่นั่นคุณจะเห็นว่าหลังจากบางบรรทัดมันจะรีเซ็ต USART โดยการลงทะเบียนเป็นศูนย์:

/* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */
    UCSR1B = 0;
    UCSR1A = 0;
    UCSR1C = 0;

ที่หน้า 168 ของแผ่นข้อมูล ATMEGA16U2 ปัจจุบันคุณจะพบว่าโดยการตั้งค่าบิต 3 (TXEN1) ของ UCSR1B คุณเปิดใช้งานเครื่องส่งสัญญาณแทนที่การทำงานของพอร์ตปกติ (เช่นจะกลายเป็นเอาต์พุต) การอ้างถึงแผ่นข้อมูล:

การเขียนบิตนี้เป็นหนึ่งจะเปิดใช้งานเครื่องส่งสัญญาณ USART เครื่องส่งสัญญาณจะแทนที่การทำงานของพอร์ตปกติสำหรับพิน TxDn เมื่อเปิดใช้งาน การปิดการใช้งานของเครื่องส่งสัญญาณ (การเขียน TXENn เป็นศูนย์) จะไม่มีผลจนกว่าการส่งสัญญาณอย่างต่อเนื่องและรอดำเนินการจะเสร็จสิ้นเช่นเมื่อ Transmit Shift Register และ Transer Buffer Register ไม่มีข้อมูลที่จะส่ง เมื่อปิดการใช้งานเครื่องส่งสัญญาณจะไม่แทนที่พอร์ต TxDn อีกต่อไป

ดังนั้นโดยการเขียนUCSR1B = 0;คุณจะไม่แทนที่ PIN TXD1 อีกต่อไปซึ่งจะทำหน้าที่เป็นอินพุต

ATMEGA16U2 TXD เชื่อมต่อกับสาย RX ของ ATSAM3X8E ในการทำงานปกติเมื่อเปิดใช้งาน UART บรรทัดนั้นจะยังคงอยู่ในระดับสูงหากไม่มีการส่งข้อมูล หากคุณปิดใช้งาน UART บรรทัดนั้นจะไม่มีไดรเวอร์อีกต่อไปเป็น 1 เนื่องจากรหัสการเริ่มต้นไม่ได้ตั้งค่า pull-up บนพินนั้น (และไม่ได้กำหนดค่าเป็นเอาต์พุต) พินจะกลายเป็นอินพุตแบบลอยและการรั่วไหลใด ๆ GND หรือแม้แต่อิมพิแดนซ์อินพุตของโพรบของคุณ (ซึ่งอยู่ระหว่างพินและ GND) จะทำให้ระดับตรรกะเป็น 0 อย่างช้าๆ

ในการแก้ไขปัญหานี้คุณควร: 1) แก้ไขเฟิร์มแวร์ ATMEGA16U2 โดยการตั้งค่า PIN นั้นเป็น OUTPUT ด้วยค่า 1 2) แก้ไขเฟิร์มแวร์ ATMEGA16U2 โดยเปิดใช้งานการดึงที่ขานั้น 3) (แนะนำ) เปิดใช้งานการดึงขึ้นบนบรรทัด RX บน ATSAM3X8E

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