PER trong ASN.1 Encoding

PER là phương thức biểu diễn dữ liệu ngắn gọn và xúc tích nhất có thể của ASN.1. Thay vì sử dụng TLV như BER, PER sử dụng Preamble (diễn cho nhiều hoặc trạng thái bị lược bỏ của một dữ liệu bên trong), giá trị kích thước(cũng có thể bị lược bỏ), giá trị (cũng có thể bị lược bỏ), hay gọi là PLV.

Đơn vị biểu diễn của PER không phải Octet mà là Bit. Mỗi phần tử sẽ thuộc 1 trong 3 loại sau:
1. Trường dư bit, tức là dãy bit không thể biểu diễn bằng một số nguyên các Octet.
2. Trường nguyên bit, có thể biểu diễn bằng một số nguyên các Octet.
3. Danh sách trường, chứa cả các thành phần là nguyên bit và dư bit.

Tiếp tục đọc

Advertisements

CER/DER trong ASN.1 Encoding

Khi sử dụng BER để hiện thực dữ liêu, ta thấy rằng có khá nhiều chỗ tùy ý. Tức là cùng một thông tin có nhiều cách biểu diễn khác nhau. Khi sử dụng với trường hợp chữ kí Số, phát sinh ra nhiều vấn đề.

Để giải quyết những vấn đề đó, người ta thêm ràng buộc vào BER, và tạo ra CERDER.

Sự khác nhau chủ yếu giữa CERDER là về biểu diễn trường độ dài. Length(L). Trong khi DER sử dụng một định dạng với độ dài cố định, thì CER sử dụng định dạng với độ dài không có định,
Tiếp tục đọc

ASN.1 – BER (Basic Encoding Rules)

Tiếp tục về ASN.1.

Như bài đầu tiên, ASN.1 tách biệt phần định nghĩa dữ liệu (các file định nghĩa) với phần hiện thực dữ liệu (mỗi trường được biểu diễn bằng mấy byte, mấy bit, etc)

Ta sẽ tiếp tục nói về hiện thực dữ liệu.
Các phương thức để hiện thực dữ liệu gồm có: BER, CER/DER, và PER.

Trong đó:
BER : Basic Encoding Rules
CER/DER : Canonical Encoding Rules/Distinguished Encoding Rules
PER : Packet Encoding Rules

Tiếp tục đọc

ASN.1 – Cú pháp cơ bản

Tiếp theo loạt bài về ASN.1, bài này sẽ “dịch” tài liệu của anh Isida So nói về cú pháp cơ bản của ASN.1.

Việc đầu tiên khi ứng dụng ASN.1 hoặc thiết kế một giao thức mới là viết định nghĩa cho các kiểu dữ liệu có thể được sử dụng.

ASN.1 là một ngôn ngữ vì thế, cũng giống với C, nó có các kiểu cơ bản và các cơ chế cho phép mở rộng để định nghĩa thêm các kiểu mới.

Ví dụ, khi muốn biểu diễn số điện thoại (TelephoneNumber), trong trường đã có kiểu dành cho chuỗi kí tự số (NumericString) thì ta chỉ việc viết như sau:

TelephoneNumber ::= NumericString
  1. Các kiểu cơ bản
  2. Kiểu cấu trúc
  3. Thẻ (Tag)
  4. Kiểu bộ phận
  5. Quy ước mở rộng (Kí hiệu mở rộng)

Tiếp tục đọc

ASN.1 là gì? Tại sao nó quan trọng.

Mình thấy ASN.1 khá quan trọng nhất là trong thiết kế giao thức trao đổi dữ liệu giữa các thiết bị tính toán, đặc biệt là các thiết bị tài nguyên nhỏ.

Google tiếng Việt thấy khá ít thông tin về ASN.1.
Mình dự định sẽ tìm hiểu thêm một chút về ASN.1 và làm loại bài viết về nó.

Nội dung bài này sẽ giới thiệu sơ qua về ASN.1.
Bài viết tham khảo rất nhiều từ bài viết của anh Ishida So

  1. ASN.1 là gì?
  2. Một số ứng dụng
  3. Làm sao để sử dụng ASN.1

Tiếp tục đọc

Thêm samba server vào bản build Linux cho Raspberry PI bằng Yocto Project

Ta đã nói đến việc build một bản phân phối Linux cho Raspberry PI ở bài Tạo một bản phân phối Linux cho Raspberry PI bằng Yocto Project.

Một trong những giao thức truy cập file phổ biến nhất hiên nay là SMB, vốn ban đầu được hỗ trợ trên các máy Windows, dùng cho giao thức chia sẻ file trong mạng nội bộ. Trên Linux, để tạo một server như thế, người ta dùng Samba (cái tên cũng na ná nhỉ).

Trong bài này, sẽ trình bày cách đưa Samba vào bản phân phối Linux đã được build ở bài trước.

Tiếp tục đọc

SCSI – Giao tiếp với USB Memory

8GB-USB-Flash-Drive-Rotation-2-0-USB-DISK-Model-Pen-drive-memory-stick-8G-HOT.jpg

Gần đây, do phải tìm hiểu khả năng porting USB Memory Driver sang NORTi nên đã có dịp tìm hiểu và tự confirm trên code một số điều liên quan đến thiết bị nhớ USB (hay ta vẫn gọi là USB Flash Memory). “USB Flash Memory” bao gồm USB: là tên giao diện cả mềm, cứng; Flash : là chất liệu của chip nhớ, Memory : là chỉ thiết bị nhớ nói chung.

Ở một số bài trước, tôi cũng viết về một số điểm chính của giao tiếp USB.

Về cơ bản, phần mềm mà programer có thể viết cho USB hầu như được xác định từ sau bước tín hiệu. Tức là phía ứng dụng mức thấp (tức driver ấy) sẽ sử dụng các thanh và các ngắt được cung cấp để setup, nhận dữ liệu, gửi dữ liêu, phát hiện kết nối.

Tiếp tục đọc

Trường Remain Length trong MQTT Fixed Header

Như ta đã biết trong bản gốc và bản tiếng Việt của giao thức MQTT, đơn vị truyền tin trong MQTT là message. Message chứa 2 phần cơ bản là Header (phần mô tả thuộc tính dữ liệu) và Payload (phần mô tả dữ liệu). Phần header chứa 2 phần nữa là Header có độ dài cố định và Header có độ dài thay đổi được.

Hầu hết các trường của phần Header cố định đều khá dễ hiểu, duy chỉ có 1 trường tương đối khó hiểu. Đó là Remain Length (độ dài còn lại). Trường này cho biết độ dài của phần phía sau Header cố định (chính là Header có độ dài thay đổi và phần Payload).

RemainLength.png

Remain Length : là trường giá trị nằm trong phần header, miêu tả độ dài phần header

Hiểu thêm về HID Report Descriptor

Đang hì hục đọc sách các kiểu con đà điều để hiểu kĩ hơn về HID Report Descriptor (Đặc tả cấu trúc dữ liệu trao đổi của HID). Thì tìm được bài này, nó giải thích hầu hết những chỗ khó hiểu một cách dễ hiểu, và đặc biệt có ví dụ minh họa.

Giờ xin dịch lại bài này một cách khái quát nhất.

Vì để hiểu bài này cần biết đến một vài khái niệm về USB, về HID Device, nữa nên để xin tóm tắt nội dung bên dưới như sau. Qua giao tiếp USB, máy tính có thể giao tiếp với rất nhiều thiết bị từ USB Flash Memory (hay gọi là USB), chuột, bàn phím,..etc. Vì có rất nhiều thiết bị có thể kết nối được, nên để dễ phân biệt và dễ dàng cho việc phát triển Driver trên máy tính, người ta chia thành các lớp thiết bị. Có rất nhiều lớp không thể kể hết được, nhưng xin có 2 lớp chính đó là Mass Storage Device (chính là USB Flash Memory đấy), và HID Device (chính là chuột, bàn phím).

Về nguyên tắc, từ khi cắm 1 thiết bị USB bất kì cắm vào cổng, cần trải qua 3 giai đoạn giao tiếp giữa máy tính và thiết bị để có thể hiểu nhau. Đó là Reset (về điện đóm), Configured (load các driver tương ứng), Sử dụng được (khi chúng di chuyển được con chuột, hoặc gõ được phím).

Trong bài này giới thiệu dữ liệu trao đổi giữa HID Driver (nằm trên máy tính) và HID Device (hay về mặt phần mềm là Firmware chạy trên Device). Mà cụ thể nói về “HID Report Descriptor”, cái được HID Device gửi lên HID Driver để báo cho Driver biết HID Device có những dữ liệu gì mà Driver có thể hỏi được, được tổ chức như thế nào.

Link : http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/

Một USB HID Report là một trong những descriptor (đặc tả) mà Host yêu cầu từ thiết bị USB. Thiết bị USB sẽ trả lời yêu cầu này bằng các Report. Nhưng Report này sẽ nói cho Host biết các dữ liệu trong quá trình sử dụng mà Device gửi lên nên được hiểu như thế nào. Trong bài này, tác giả Frank-Zhang(Sony Engineer) đã giới thiệu theo từng ví dụ. Tiếp tục đọc