โปรโตคอลทั่วไปสำหรับการถ่ายโอนข้อมูลจากระบบหนึ่งไปสู่อีกระบบหนึ่ง?


18

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


4
สิ่งที่เป็นรูปธรรมที่คุณต้องการจะทำคืออะไร?
starblue

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

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

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

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

คำตอบ:


10

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

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

แน่นอนว่านี่จะเป็นขอบเขตที่อันตรายยิ่งขึ้นตลอดเวลา สิ่งต่าง ๆ เช่น PCI และ ISA เป็นรถเมล์ที่เถียงไม่ได้ I2C, SPI, USB เป็นรถบัสเนื้อหา ในขณะที่ RS232, RS485 และอีเธอร์เน็ตเป็นส่วนต่อประสานการสื่อสารอย่างแน่นอน แต่มีหลายอย่างเช่น CAN บัสและ 1553 ซึ่งแน่นอนเกี่ยวกับการย้ายข้อมูลไปรอบ ๆ แต่ก็มีส่วนเกี่ยวข้องมาก


CANbus เกี่ยวข้องมากและอีเธอร์เน็ตไม่ CAN นั้นง่ายมากที่จะทำงานเพื่อส่งข้อความไปมาอย่างง่ายดาย พวกเขาเป็นชิปเฉพาะและครอบครัวส่วนใหญ่สนับสนุนภายในกับไมโครคอนโทรลเลอร์
Kortuk

@Kortuk - ตราบเท่าที่บางสิ่งบางอย่างเช่น 232 มีความสมมาตรแบบเพียร์ทูเพียร์ในขณะที่ 1553 หรือสามารถกำหนดความสัมพันธ์แบบ Master / Slave ได้ใช่ ฉันไม่เชื่อว่าฉันบอกว่าอีเธอร์เน็ตนั้นเรียบง่ายเพียง แต่มันไม่ได้กำหนดความแตกต่างของตัวควบคุมบัส / บัสอุปกรณ์ในจุดสิ้นสุด
JustJeff

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

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

11

ไม่มีวิธีใดในการส่งข้อมูลมีหลายวิธีในการสื่อสารขึ้นอยู่กับระยะทางอัตราข้อมูลสภาพแวดล้อมแอปพลิเคชัน ...

เลเยอร์ต่ำสุดคือเลเยอร์ทางกายภาพซึ่งย้ายบิตไปรอบ ๆ

  • SPI และI²Cใช้สำหรับระยะทางสั้น ๆ ภายในอุปกรณ์ซึ่งไม่มีเสียงรบกวนมากนักที่อาจรบกวนการส่งสัญญาณ

  • สำหรับการสื่อสารที่ไม่เร็วเกินไปในระยะทางจนถึงการสื่อสารต่อเนื่องหลายสิบเมตรผ่าน RS-232 เป็นตัวเลือกที่ดี

  • หากมีสัญญาณรบกวนมากขึ้นหรือใช้สัญญาณระยะไกลที่ยาวกว่าเช่นใน RS-485 สำหรับการส่งข้อมูลที่เร็วขึ้นนั้นมี Ethernet ซึ่งกำลังได้รับความนิยมมากขึ้นเรื่อย ๆ

  • จากนั้นก็ยังมีมาตรฐานไร้สายต่าง ๆ

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


7

อนุกรมง่ายUARTสามารถนำมาใช้ (หนึ่ง Tx และ Rx หนึ่งบรรทัดที่ไม่มีนาฬิกาที่ไม่ต่อเนื่อง) และสามารถดัดแปลงได้ง่ายที่จะข้ามระหว่างศักยภาพที่แตกต่างกัน (วงจรประถมศึกษาและมัธยมศึกษาแม้) กับ optoisolators หรือแยกแม่เหล็ก

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

ตัวอย่างเช่นPMBusเป็นโปรโตคอลการสื่อสารแหล่งจ่ายไฟที่ใช้ I2C เป็นสื่อทางกายภาพ


6

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

คำถามเกี่ยวกับแอปพลิเคชันนี้:

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

หากคุณตอบว่าไม่ตอบคำถาม 1:

หากมีคอนโทรลเลอร์เพียง 2 ไมโครคอนโทรลเลอร์ในโครงการนี้คุณสามารถใช้ UART ระหว่างกันได้ หากพวกเขาจำเป็นต้องเริ่มต้นการสื่อสารให้ใช้การควบคุมการไหลมิฉะนั้นมันควรจะส่งข้อมูลในทิศทางเดียว ส่วนใหญ่ควร "เร็วพอ" เนื่องจากคุณเลือกอัตรารับส่งข้อมูลที่สูงกว่าอย่างใดอย่างหนึ่ง โดยทั่วไปแล้ว I2C ​​และ SPI นั้นดีสำหรับสถาปัตยกรรม master / slave เท่านั้น

หากคุณตอบว่าใช่ (มากกว่า 2 ตัวควบคุม) สำหรับคำถามที่ 1:

  • หากมีไมโครคอนโทรลเลอร์มากกว่า 2 ตัวในโครงการของคุณโครงการใดที่เริ่มการสื่อสาร มันจะเป็นตัวควบคุมหลักเพียงตัวเดียวเท่านั้น (เช่นสถาปัตยกรรม master-slave) หรือไม่ หรือระบบย่อยใด ๆ สามารถพูดได้ตลอดเวลา?
  • จำเป็นต้องให้ระบบย่อยใด ๆ คุยกันหรือไม่? เช่นสำหรับอุปกรณ์ A, B และ C: A สามารถส่งไปยัง B และ C และ B สามารถส่งไปยัง A และ C เป็นต้น

ดังนั้นตอนนี้คุณต้องการสิ่งที่ปรับขนาดได้มากกว่าที่คุณสามารถวางอุปกรณ์แอดเดรสลงบนรถบัสทั่วไป คำตอบของคำถามติดตามเหล่านี้จะช่วยให้คุณตัดสินใจเลือกระหว่าง I2C และ SPI (master-slave) หรืออะไรก็ได้เช่น CAN (multi-master)

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


5

ดังที่ @ จอนได้กล่าวไว้ประเด็นหนึ่งในการเลือกอินเทอร์เฟซการติดต่อสื่อสารคือการที่องค์กรหนึ่งจะรับผิดชอบการเริ่มต้นการสื่อสารหรือไม่หรือมากกว่าหนึ่งกิจการอาจรับผิดชอบ เรื่องที่เกี่ยวข้องคือว่าองค์กรหนึ่งจะพร้อมรับการสื่อสารที่ไม่พึงประสงค์ได้หรือไม่ SPI มักใช้ในแอปพลิเคชันซึ่งด้านใดด้านหนึ่งจะพร้อมรับการสื่อสารเสมอ ยกตัวอย่างเช่น 74HC595 shift register เป็นต้นว่า "ไม่ว่าง" ในขณะที่ SPI นั้นดีสำหรับการสื่อสารระหว่างไมโครคอนโทรลเลอร์และฮาร์ดแวร์ที่ไมโครควรจะควบคุม แต่ก็ไม่ดีสำหรับการสื่อสารระหว่างไมโครคอนโทรลเลอร์สองตัว เมื่อโปรเซสเซอร์สองตัวที่ใช้ฮาร์ดแวร์ I2C ใช้เพื่อสื่อสารซอฟต์แวร์สามารถใช้ตราบเท่าที่ต้องการ (ภายในข้อ จำกัด ที่เอื้ออำนวย) เพื่อจัดการกับสิ่งที่เกิดขึ้น โดยไม่ทำให้ข้อมูลสูญหาย หากโปรเซสเซอร์ต้องใช้เวลา 100 ไมโครวินาทีในการประมวลผลแต่ละไบต์ที่เข้ามาซึ่งจะ จำกัด ปริมาณงานอย่างรุนแรง แต่ผู้ส่งจะชะลอตัวลงมากพอที่ผู้รับจะรักษาไว้ วิธีเดียวที่โดยทั่วไปสามารถเกิดขึ้นกับ SPI คือถ้ามีสายแยกต่างหากสำหรับการจับมือกัน

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

  1. ความเร็วของมันค่อนข้าง จำกัด SPI สามารถไปได้เร็วกว่ามากและบางครั้ง UART ก็สามารถทำงานได้เร็วขึ้นเล็กน้อย
  2. (2) ในขณะที่มันสะดวกมากที่ I2C ต้องการเพียงสองสาย แต่สายทั้งสองนั้นจะต้องสามารถสื่อสารแบบ open-collector แบบสองทิศทางได้ ทำให้ยากที่จะส่ง I2C ผ่านตัวทำซ้ำ

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


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

โอ้ฉันเดาว่าฉันควรชี้แจงว่าการเปิดใช้งานของทาสไม่ได้รับการยืนยันจนกว่าจะได้รับที่อยู่ไบต์และพวกเขายังคงอยู่จนกว่าการเลือกชิปเดียวจะถูกปิดบัง ... ดังนั้นจึงเห็นได้ชัดว่าแตกต่างจาก SPI + ระดับสูงเล็กน้อย มาตรการ. อย่างไรก็ตามมันเข้ากันได้กับ SPI มาตรฐานจากมุมมองอุปกรณ์หลัก (เหมือนไมโครโปรเซสเซอร์)
darron

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

@darron: เพื่อหลีกเลี่ยงการใช้พินเลือกชิปสัญญาณหลักเริ่มต้นของคำสั่งโดยการส่งสองขอบที่เพิ่มขึ้นบนสายข้อมูลในขณะที่นาฬิกาอยู่ในระดับต่ำ ทาสสามารถระบุได้ว่าไบต์ข้อมูลสุดท้ายของพวกเขาถูกต้องหรือไม่โดยการส่งออกค่าสถานะเมื่อนาฬิกาและข้อมูลต่ำ (ว่าง); มิฉะนั้นพวกเขาระบุว่าพวกเขาต้องการความสนใจเมื่อนาฬิกาต่ำและข้อมูลสูง ถ้าฉันออกแบบฮาร์ดแวร์หลักสำหรับโปรโตคอลนี้ฉันจะเพิ่มความสามารถในการส่งพัลส์นาฬิกา 8 อันซึ่งนาฬิกามิเรอร์สายข้อมูลและในฮาร์ดแวร์ทาสรวมถึงการนับจำนวนอะซิงโครนัสของจำนวนขอบที่เพิ่มขึ้นระหว่าง ...
supercat

@darron: ... byte data ถ้าห้าคนหรือมากกว่านั้นไบต์จะถูกเพิกเฉย (ทาสจะถือว่านายสนใจที่จะรับข้อมูลเป็นไบต์ แต่ไม่มีอะไรที่มันอยากจะพูด) แม้ว่ามันจะไม่สำคัญเท่ากับการมีทาสรายงานสถานะไบต์สุดท้ายเมื่อนาฬิกาเหลือน้อย (ซึ่งถ้าหากอุปกรณ์ทาสเป็นโปรเซสเซอร์ให้ผู้รู้ว่าทาสไม่พร้อม) และพลาดโอกาสการทำธุรกรรมล่าสุดไปแล้ว
supercat

3

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

  • daisy-chain SPI (เช่นใช้โดย JTAG)
  • SPI เลือกลวดต่อทาส
  • "TTL ระดับ RS-232" aka "การสื่อสารแบบอะซิงโครนัสสต็อปเริ่มแบบหยุด" (เชื่อมต่อโดยตรงกับ UART TX พินของ CPU หนึ่งตัวไปยัง UART RX pin ของ CPU ตัวอื่น)
  • I2C
  • data 8-bit + strobe (เช่นพอร์ตเครื่องพิมพ์ขนาน IEEE 1284)
  • shared-memory (หนึ่ง CPU เท่านั้นที่อยู่บัส / ข้อมูล / การควบคุมบัสในเวลา)

อินสแตนซ์เลเยอร์ทางกายภาพเหล่านี้ (รวมถึงอินสแตนซ์เลเยอร์ทางกายภาพอื่น ๆ สำหรับ 2 ซีพียูในกล่องแยกต่างหาก) โดยทั่วไปจะให้กระแสข้อมูลจำนวนไบต์ไปยังซอฟต์แวร์ที่ใช้ระบบการสื่อสารในระดับที่สูงขึ้น

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

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

  1. คำนำ
  2. หัวข้อ
  3. (อาจหนีไปแล้ว) ข้อมูลต่อเนื่อง
  4. รถพ่วง

บางคนดูเหมือนจะสนุกกับการสร้างโปรโตคอลใหม่ที่กำหนดเองและเข้ากันไม่ได้โดยการผสมและจับคู่ (2) หนึ่งในโครงสร้างส่วนหัวหลายชนิดที่มี (3a) หนึ่งในหลาย ๆ ชนิดของข้อมูลซีเรียลไลซ์ที่มี (3b) หนีข้อมูลที่ต่อเนื่องนั้นด้วย (4) หนึ่งในหลาย ๆ ตัวอย่าง

โพรโทคอลที่ง่ายที่สุดสำหรับการห่อหุ้มข้อมูลลงในแพ็กเก็ตประกอบด้วย

โปรโตคอลที่ซับซ้อนกว่าเล็กน้อยสำหรับการห่อหุ้มข้อมูลลงในแพ็กเก็ตประกอบด้วย:

มีรายการโปรโตคอลจำนวนมากที่

คุณอาจสนุกกับการอ่าน "Protocol Design Folklore"โดย Radia Perlman ซึ่งอธิบายว่าการออกแบบโปรโตคอลสามารถผิดพลาดได้อย่างไร


3

ไม่มีโปรโตคอล 'ทั่วไป' เดียว ตัวเลือกสามารถ (ตัวอย่าง) ขึ้นอยู่กับ:

  • ระยะทาง
  • ปริมาณงานที่ต้องการ
  • ความพร้อมใช้งานของอุปกรณ์ต่อพ่วงพิเศษ
  • ระดับเสียง
  • ต้องการแยกแสง
  • วิกฤติ (อัตราความล้มเหลวที่ยอมรับได้)
  • ซีพียู avialable ที่ปลายทั้งสอง
  • หมุด I / O ที่มีอยู่ที่ปลายทั้งสอง

ในหลายกรณีคุณต้องปิดการใช้งานเลเยอร์ทางกายภาพ (ระดับสัญญาณ) จากดาต้าลิงค์เลเยอร์ (+/- วิธีการเข้ารหัสข้อมูล) (ตรวจสอบรุ่น OSI, ลดเลเยอร์ 2 ..4) เลเยอร์ phyiscal ที่เป็นไปได้คือตัวอย่าง:

  • ง่าย 5V หรือ 3.3V หรือ 1.8V TTL
  • รายการใด ๆ ข้างต้นยกเว้น open-collector แทน push-pull
  • สัญญาณแรงดันไฟฟ้าของ Lov สมดุล (มักใช้กับ FPGA ของ)
  • สมดุล higer volatge (RS485, RS432)
  • สิ้นสุดวันที่เดียวแรงดันสูง (RS232)
  • บาลานซ์ trafo-coupled (อีเธอร์เน็ตเวอร์ชั่นต่างๆ, เสียง PDIF)
  • ออปติคอล (optical ethernet, toslink)

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

เธอมีวิธีมากมายในการเข้ารหัสข้อมูลและนาฬิกาบนบรรทัด RS232 ใช้ NRZ ตามปกติมีการเข้ารหัส Machester และใช้รูปแบบต่าง ๆ บนฮาร์ดดิสก์ที่มีชื่ออยากรู้อยากเห็นเส้น 2.7 RLL

เพื่อสรุปมัน: มีวิธีการสื่อสารระหว่างระบบซิสเสม และฉันยังไม่ได้กล่าวถึงตัวเชื่อมต่อหรือลักษณะระดับสูงกว่าเช่นการตรวจจับข้อผิดพลาดและการกู้คืนการเข้ารหัสข้อมูลการบีบอัดและการเข้ารหัส ...

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