title: Simple serial point-to-point communication protocol
body: <p>I need a simple communication protocol between two devices (a PC and a microcontroller). The PC must send some commands and parameters to the micro. The micro must transmit an array of bytes (data from sensor).</p>
  
  <p>The data must be <a href="http://en.wikipedia.org/wiki/Error_detection_and_correction" rel="noreferrer">noise protected</a> (besides parity checking, I think I need some other data correction method).</p>
  
  <p>Is there any standard solution to do this? (I need only an idea, not the complete solution).</p>
  
  <p>P.S. Any advice is appreciated. <em>P.P.S Sorry for any grammar mistakes, I hope you understand.</em></p>
  
  <p><strong>Edit 1.</strong> I have not decided whether it will be <strong><em>master/slave</em></strong> protocol or both sides can initiate communication. The PC must know when micro have done a job and can send data. It can continuously poll the micro if data is ready, or the micro can send data, when a job is done. I don't know which is better and simpler.</p>
  
  <p><strong>Edit 2.</strong> <strong><em>Hardware and <a href="http://en.wikipedia.org/wiki/Physical_Layer" rel="noreferrer">physical layer</a> protocol.</em></strong> Since <a href="http://en.wikipedia.org/wiki/RS-232" rel="noreferrer">RS-232</a>C serial standard used in the PC, I will use <a href="http://en.wikipedia.org/wiki/Asynchronous_serial_communication" rel="noreferrer">asynchronous communication</a>. I will use only RxD, TxD and GND signals. I can't use additional wires because the microcontroller AFAIK doesn't support them. BTW I'm using the <a href="http://en.wikipedia.org/wiki/Atmel_AVR" rel="noreferrer">AVR</a> ATmega128 chip.</p>
  
  <p>So I will use fixed baud rate, 8 bits of data, 2 stop bits without parity checking (or with?).</p>
  
  <p><strong><em><a href="http://en.wikipedia.org/wiki/Data_Link_Layer" rel="noreferrer">Data link protocol</a></em></strong>. That's what my question primarily concerned about. Thanks for suggesting <a href="http://en.wikipedia.org/wiki/High-Level_Data_Link_Control" rel="noreferrer">HDLC</a>, <a href="http://en.wikipedia.org/wiki/Point-to-Point_Protocol" rel="noreferrer">PPP</a> and <a href="http://en.wikipedia.org/wiki/Modbus" rel="noreferrer">Modbus</a> protocols. I will research on it.</p>