- รูปแบบการจัดข้อมูลในการรับส่งเราเรีบกว่า format
- ข้อตกลงในการรับส่งข้อมูลเราเรียกว่าโปรโตคอล (Protocol)
ทั้งภาครับและภาคส่ง จะต้องมีรูปแบบ และโปรโตคอลเดียวกันจึงจะสื่อสารกันได้
ตัวอย๋างรูปแบบ (format) ในการรับ-ส่งข้อมูล แบบต่างๆ ลองพิจารณาดูให้เหมาะสมกับงานครับ
รูปแบบของการส่งข้อมูล ใน 1 Package หรือบางทีเรียกว่า Block จะประกอบด้วย
- ตัวเริ่มต้น เพื่อให้ภาครับตรวจสอบจุดเริ่มต้นของ Package
- ส่วนข้อมูล หรือค่ำสั่ง
- จุดสิ้นสุดข้อมูล
- ข้อมูลตรวจสอบความผิดพลาด การตรวจสอบความผิดพลาดมีหลายแบบด้วยกันเช่น
check sum นำข้อมูลทั้งหมดมาบวกกัน เช่นใน HEX ไฟล์ ของ Intel ที่เราใช้ในการโปรแกรมชิพ
LRC (Logic redundancy check) นำข้อมูลมากระทำทางตรรก ส่วนใหญ่จะใช้ XOR เช่นการส่งของมูลข้อง Pager
CRC(Clic redundancy check) เป็น Algorithm ในการตรวจสอบเช่น การตรวจสอบข้อมูลใน Hardisk
(อาจใช้ keyword ในการ search หาข้อมูลเพิ่มเติม จาก google)
ในการใช้งานจริงสำหรับไมโครฯ ก็มักจะใช้ Check sum, กับ LRC มากกว่า เพราะสามารถ คำนวนได้เร็ว ส่วน CRC ต้องใช้หน่วยความจำจำนวนมาก
//*************************************
format แบบ Control เป็น ไบนารี ข้อมูลเป็น ASCII
ตัวอย่างบางส่วน
#define SOH 0x01 // Start of Head
#define STX 0x02 //Start of Text
#define ETX 0x03 //End of Text
#define EOT 0x04 //End of Transmit
#define ENQ 0x05 //Enquiry
#define ACK 0x06 //Acknowledge
#define NAK 0x15 //Negative Acknowledge
รูปแบบ <SOH>Header<STX>Data<ETX><CHK>
เช่น <SOH>Temp<STX>28.5C<ETX><E9>
ตัวอย่างโปรโตคอล
ตัวส่งจะต้องตรวจสอบว่าตัวรับพร้อมหรือไม่ก่อนที่จะทำการส่งข้อมุล
ตัวส่ง -> <ENQ> พร้อมไหม
ตัวรับ <- <ACK> พร้อม (ตอบ <NAK> หากไม่พร้อม หรือต้องการให้ส่งใหม่)
ตัวส่ง -> <SOH>Temp<STX>28.5C<ETX><E9>
ตัวรับ <- <ACK> ข้อมูลถูกต้อง (ตอบ <NAK> หากคำนวนแล้วไม่ถูก ให้ส่งใหม่)
//*************************************
format แบบ Text ไฟล์
ข้อดีของแบบนี่ก็คือ สามารถตรวจสอบได้ด้วย Hyperterminal และสามารถบันทึกแล้วนำกลับมาดูด้วย Text editor อย่างเช่น notepad ได้
แบบ Package ขนาดคงที่
#HHNNCCAADDXX<0x0D>
แบบ Package ขนาดตามข้อมูล
#HHNNCCAADD.......XX<0x0D>
โดยที่
HH Host Address หมายถึง address ของผู้ส่ง 00-FFh
NN Node Address หมายถึง address ของผู้ที่ต้องการจะติดต่อด้วย 00-FFh
CC เป็นคำสัง 2 Byte
AA Address ของ I/O ใน node นั้น
DD... เป็น Data (Parameter)เป็น ASCII ทั้งหมด หากไม่มี Parameter กำหนดเป็น 00
XX XOR ตั้งแต่ * จนถึง data ตัวสุดท้าย
<0x0D> คือค่า 0x0D,"\r', หรือ CR - cariage Return
ตัวอย่าง
Host = PC; Node = A0; CC = WB write bit; AA = 01; DD = 08; XX = 5D
ตัวส่ง -> #PCA0WB01085D<OD>
ตัวรับ <- #A0PCY0000028<OD> Y0 เป็น การตอบรับข้อมูลถูกต้อง (XC เป็นการปฏิเสธ ให้ส่งมาใหม่)
อีกตัวอย่างในการส่งข้อมูล 8 byte 02290F801E054F80
ตัวส่ง -> #PCA0WW0002290F801E054F803D
ตัวรับ <- #A0PCY0000028<OD> Y0 เป็น การตอบรับข้อมูลถูกต้อง (XC เป็นการปฏิเสธ ให้ส่งมาใหม่)
จากตัวอย่างให้ดูเป็นแนวทาง ลองสร้าง ค่ำสั่งขึ้นมาเอง ตามการใช้งาน และตัดส่วน ที่ไม่ได้ใช้ทิ้งไปครับ
ดูตัวอย่าง โครงงานที่ใช้ format และโปรโตคอลนี้
http://www.thaimicrotron.com/Project/BIG7SEG1/BIG7SEG.htm//*************************************
INTEL HEX File ก็เป็น ตัวอย่างการส่งข้อมูลจำนวนมาก ที่น่าสนใจนะครับ ดูเพิ่ม
http://www.thaimicrotron.com/Referrence/HEXFILE/IntelHEXFile.htm