Ngôn ngữ
English English Vietnamese (Tiếng Việt) Vietnamese (Tiếng Việt) Chinese (简体中文) Chinese (简体中文) Portuguese (Brazil) (Português do Brasil) Portuguese (Brazil) (Português do Brasil) Spanish (Español) Spanish (Español) Indonesian (Bahasa Indonesia) Indonesian (Bahasa Indonesia)

Chia số bit đọc được từ bản ghi UART, SPI, I²C hay CAN cho 8 để ra số byte mà bộ đệm phần sụn thật sự chứa, đã tính cả phần đóng khung.

Từ bit trên đường truyền thành byte trong bộ đệm

Khi bạn kẹp máy phân tích logic vào một đường UART, SPI, I²C hay CAN, bản ghi thu được tính bằng bit. Còn phần sụn của bạn thì làm việc theo byte: bộ đệm nhận 64 ô, bản đồ thanh ghi 12 thanh ghi, trường dữ liệu giới hạn 8 byte. Mỗi lần đi qua lại giữa hai cách nhìn đó là một lần chia cho tám, và nhẩm phép chia ấy lúc 3 giờ sáng khi một khung cứ sai tổng kiểm tra chính là cách những lỗi lệch một đơn vị lọt ra bản phát hành.

Hệ số: byte = bit ÷ 8 (tương đương bit × 0,125). Một khung CAN 2.0A dài 108 bit là 108 ÷ 8 = 13,5 byte thời gian chiếm đường truyền — trong đó chỉ 8 byte là dữ liệu của bạn.

Phép chia thì tầm thường. Thứ làm người ta vấp là loại bit vừa được đếm. Một byte dữ liệu ứng dụng gần như không bao giờ chiếm đúng tám khoảng bit trên đường vật lý, bởi phần đóng khung, phần đồng bộ và phần phát hiện lỗi đều mượn chỗ trên cùng sợi dây.

Bit đường truyền và bit dữ liệu

Máy đo đếm mọi lần chuyển mức trên dây, kể cả bit khởi đầu, bit dừng, bit chẵn lẻ và bit chèn. Chia con số đó cho tám, bạn có thời gian chiếm dây quy ra byte, không phải số byte mà vi điều khiển sẽ thật sự lưu.

Độ rộng thanh ghi

Tài liệu kỹ thuật mô tả ngoại vi theo bit — kết quả ADC 12 bit, bộ tích lũy 24 bit, mẫu cảm biến 40 bit. Đổi sang byte cho biết mỗi lần đọc chiếm bao nhiêu ô đệm và tốn thêm bao nhiêu byte đệm lót.

Ngân sách thời gian

Khoảng bit mới là đơn vị quyết định độ trễ ngắt và cỡ khối DMA. Đổi số bit trong một cụm truyền sang byte, bạn biết ngay FIFO có kịp rỗng trước khi khung kế tiếp ập tới hay không.

Quy đổi một bản ghi tín hiệu theo từng bước

1

Đếm đúng loại bit bạn định nói tới

Trước hết hãy quyết định bạn đang đếm bit dữ liệu hay mọi bit mà máy phân tích nhìn thấy. Với một byte UART 8N1, hai con số đó là 8 và 10 — hai câu trả lời khác nhau cho cùng một câu hỏi.

2

Gõ số bit vào ô nhập

Nhập con số vào ô bit. Giá trị byte đổi theo từng phím gõ, nên bạn rà hết bảng bóc tách một khung mà không phải bấm thêm gì. Bản xuất từ bộ giải mã thường kèm dấu cách hoặc dùng dấu phẩy làm dấu thập phân — cả hai đều được chấp nhận và dấu cách thì bị bỏ qua.

3

Sao chép số thẳng vào mã nguồn

Nút Sao chép ở mỗi ô trả về con số trần, không kèm đơn vị và không có khoảng trắng — đúng thứ bạn cần khi giá trị sắp đi vào một #define, một kích thước bộ đệm hay một câu lệnh kiểm thử.

4

Đảo chiều khi quay lại máy đo

Bấm nút Đảo đơn vị để đi ngược từ byte về bit — tiện lúc bạn biết dữ liệu của mình dài 32 byte và cần biết nó chiếm bao nhiêu khoảng bit. Hai danh sách đơn vị đều có ô tìm đơn vị, nên nhảy sang kilobit hay byte mỗi giây cũng ngay tại trang này.

Hao phí đóng khung UART: từ tốc độ baud tới byte thực nhận mỗi giây

Cấu hình 8N1 kinh điển bọc mỗi byte dữ liệu bằng một bit khởi đầu và một bit dừng, nên mười khoảng bit mới chở nổi tám bit dữ liệu — một khoản thuế cố định 25 %. Đó là lý do ước lượng ngây thơ "lấy tốc độ baud chia tám" luôn cao hơn những gì đường truyền thật sự giao được.

Tốc độ baud (bit/s) Chia 8 kiểu ngây thơ Dữ liệu thật (8N1, 10 bit/byte) Thời gian cho một byte
9.6001.200 B/s960 B/s1.042 µs
19.2002.400 B/s1.920 B/s521 µs
38.4004.800 B/s3.840 B/s260 µs
57.6007.200 B/s5.760 B/s174 µs
115.20014.400 B/s11.520 B/s86,8 µs
921.600115.200 B/s92.160 B/s10,9 µs

Thêm một bit chẵn lẻ thì khung dài thành mười một khoảng bit, kéo mức 9.600 baud xuống còn khoảng 873 byte dữ liệu mỗi giây. Hai bit dừng ăn thêm một chỗ nữa. Không điều nào trong đó động tới phép chia cho 8 — chúng chỉ đổi số bit mà bạn nên đưa vào phép chia.

Hai ô cùng sống khi bạn so các khung

Gõ vào ô nào thì ô kia theo ngay, nên bạn giữ được một bên là số byte dữ liệu, một bên là thời gian chiếm dây mà chẳng phải nhập lại.

Kết quả dễ đọc với cụm truyền dài

Hàng nghìn được tách bằng dấu cách, còn bản ghi cực lớn thì chuyển sang dạng lũy thừa, nhờ vậy một vệt tín hiệu vài triệu bit vẫn đọc được thay vì thành bức tường chữ số.

Mọi đơn vị của bus trong một danh sách

Danh sách đơn vị có ô tìm kiếm và phủ cả bit, kilobit, byte lẫn các đơn vị tốc độ mỗi giây, nên một con số của CAN, SPI hay UART đều diễn đạt lại được mà không phải đi tìm trang khác.

Không có gì rời khỏi bàn thí nghiệm

Mọi phép tính chạy ngay trong trình duyệt sau khi trang tải xong, nên các con số lấy từ bản ghi của khách hàng không được gửi đi đâu cả.

Câu hỏi về giao thức nối tiếp

Vì sao đường truyền 9.600 baud chỉ chở 960 byte mỗi giây thay vì 1.200?

Vì baud đếm ký hiệu trên dây chứ không đếm bit dữ liệu. Trên một đường UART nhị phân chuẩn, mỗi ký hiệu là một bit, nên 9.600 baud là 9.600 khoảng bit mỗi giây — nhưng khung 8N1 tiêu tốn mười khoảng bit cho mỗi byte dữ liệu. Chia cho 8 ra con số lý thuyết 1.200 B/s, mức chỉ đạt được nếu đường truyền chẳng chở gì ngoài dữ liệu; chia cho 10 mới ra 960 B/s mà ứng dụng của bạn nhận thật.

Bit khởi đầu, bit dừng và bit chẵn lẻ đóng góp gì vào phép đếm?

Bit khởi đầu là một sườn xuống báo cho bên nhận bắt đầu lấy mẫu; bit dừng giữ đường ở mức nghỉ đủ lâu để sườn khởi đầu kế tiếp không bị hiểu nhầm. Cả hai đều không mang thông tin. Bit chẵn lẻ, khi được bật, thêm một bit thứ chín nằm cạnh dữ liệu, thuần túy để phát hiện lỗi một bit. Vậy khung 8E1 dài 11 khoảng bit — tức 1,375 byte thời gian đường truyền cho một byte dữ liệu.

Truyền MSB trước hay LSB trước có làm đổi số byte thu được không?

Không — số đếm y hệt nhau, chỉ giá trị ghép lại là khác. UART dịch ra LSB trước, còn SPI và I²C theo thông lệ dịch MSB trước. Lẫn lộn hai bên sinh ra các byte đảo bit nhưng vẫn chiếm đúng chừng ấy khoảng bit, và đó chính là lý do triệu chứng nhìn giống dữ liệu hỏng chứ không giống lệch độ dài.

Bit chèn của CAN làm thay đổi bức tranh bit sang byte thế nào?

CAN chèn thêm một bit ngược mức sau năm bit giống nhau liên tiếp để các bên nhận giữ đồng bộ đồng hồ. Một khung định danh 11 bit chuẩn với đủ 8 byte dữ liệu dài 108 bit trước khi chèn, và trường hợp xấu nhất có thể lên tới khoảng 135 bit. Số bit dôi ra đó thuần túy là thời gian chiếm dây: dữ liệu của bạn vẫn là 8 byte, bất kể bộ thu phát đã chèn thêm bao nhiêu bit.

Bộ giải mã xuất độ dài cụm truyền theo bit — tôi so nó với bộ đệm nhận kiểu gì?

Hãy chia con số xuất ra cho độ dài khung, chứ không phải cho tám, rồi mới đem số byte đó so với độ sâu bộ đệm. Một cụm 12.000 bit ở chế độ 8N1 là 1.200 khung, tức cần 1.200 byte chỗ chứa; còn phép tính thô 12.000 ÷ 8 = 1.500 lại mô tả mức chiếm dụng đường truyền. Đưa nhầm con số vào bài toán chọn cỡ FIFO là nguyên nhân quen thuộc của những cờ tràn bộ đệm không rõ từ đâu ra.

b
B

Độ dài khung truyền nối tiếp

8 bit (chỉ dữ liệu)=1 B
10 bit (khung 8N1)=1,25 B
11 bit (khung 8E1)=1,375 B
64 bit (trường dữ liệu CAN)=8 B
108 bit (khung CAN 2.0A)=13,5 B
9.600 bit (1 s ở 9.600 baud)=1.200 B

Bit (b)

Một khoảng bit trên bus. Ở tốc độ 115.200 baud, một bit kéo dài 8,68 µs, và mọi thứ máy phân tích vẽ ra — sườn khởi đầu, mức dừng, bit chèn — đều được đếm bằng đơn vị này.

Byte (B)

Tám bit dữ liệu, và là đơn vị mà vi điều khiển thật sự lưu: một ô FIFO, một mục trong bản đồ thanh ghi, một phần tử của trường dữ liệu tám byte trong khung CAN.

Nhập tổng số khoảng bit mà máy phân tích ghi được, đừng chỉ nhập bit dữ liệu — khung 8N1 tốn 10 khoảng bit cho mỗi byte
Nút Sao chép ở mỗi ô trả về con số trần, dán thẳng được vào một #define hay một kích thước bộ đệm
Bấm Đảo đơn vị để chạy chiều ngược lại khi bạn biết số byte dữ liệu và cần độ dài của nó trên dây
Cả hai danh sách đơn vị đều có ô tìm đơn vị, nên kilobit hay byte mỗi giây chỉ cách một lần gõ phím
Muốn biết thêm? Đọc tài liệu →
1/5

Đổi Đơn Vị Dung Lượng

Bytes to Bits Bytes to Gigabytes Bytes to Kilobytes Bytes to Megabytes Chuyển đổi Kilobytes sang Kibibytes Chuyển đổi Kilobytes sang Kilobits Chuyển đổi Kilobytes sang Megabytes Chuyển đổi Mebibytes sang Gibibytes Chuyển đổi Mebibytes sang Kibibytes Chuyển đổi Mebibytes sang Megabytes Chuyển đổi Megabit mỗi giây sang Megabyte mỗi giây Chuyển đổi Megabits sang Megabytes Chuyển đổi Megabytes sang Bytes Chuyển đổi Megabytes sang Gigabytes Chuyển đổi Megabytes sang Kilobytes Chuyển đổi Megabytes sang Mebibytes Chuyển đổi Megabytes sang Megabits Chuyển đổi Megabytes sang Terabytes Chuyển đổi Petabytes sang Terabytes Chuyển đổi Tebibytes sang Gibibytes Chuyển đổi Tebibytes sang Terabytes Chuyển đổi Terabytes sang Gigabytes Chuyển đổi Terabytes sang Megabytes Chuyển đổi Terabytes sang Petabytes Chuyển đổi Terabytes sang Tebibytes Gibibytes to Tebibytes Gigabits per second to Gigabytes per second Gigabits to Gigabytes Gigabytes to Megabytes Gigabytes to Terabytes Kibibytes to Kilobytes Kibibytes to Mebibytes Kilobits to Kilobytes Kilobytes to Bytes Đổi Bit sang Byte (trang hiện tại) Đổi GB Sang Byte Đổi GB Sang Gb Đổi GB Sang GiB Đổi GiB Sang GB Đổi GiB Sang MiB
Bình luận 0
Để lại bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!

Bắt đầu gõ để tìm kiếm...
Đang tìm kiếm...
Không tìm thấy kết quả
Hãy thử tìm với từ khóa khác