
1-Wire là một giao thức truyền thông đơn giản, được phát triển bởi Dallas Semiconductor (nay thuộc Maxim Integrated), chủ yếu dùng để giao tiếp với cảm biến nhiệt độ và bộ nhớ không mất dữ liệu. Điểm đặc biệt là giao thức này chỉ cần một dây duy nhất để vừa truyền dữ liệu vừa cấp nguồn cho thiết bị, giúp giảm thiểu số lượng dây kết nối và tối ưu chi phí.
Hệ thống 1-Wire hoạt động theo mô hình Master-Slave, trong đó chỉ có một thiết bị điều khiển chính (bus master), còn các thiết bị còn lại (slave) chỉ phản hồi khi được gọi đúng địa chỉ. Giao thức này là nửa song công (half-duplex), tức là dữ liệu có thể truyền theo hai chiều nhưng không cùng lúc.
Giao thức hỗ trợ hai chế độ tốc độ:
🔹Chế độ tiêu chuẩn: 8.33 kbit/s
🔹Chế độ Overdrive: lên đến 90 kbit/s
Xem thêm: Inter-IC sound (I2S) là gì? Hiểu về giao thức truyền âm thanh số
Điểm đặc biệt của giao thức 1-Wire
1-Wire không yêu cầu tín hiệu xung nhịp riêng, vì các thiết bị slave sử dụng bộ dao động nội và đồng bộ với cạnh xuống của tín hiệu trên bus. Nhờ vào thiết kế đơn giản, tiêu thụ ít năng lượng, giao thức này thường được ứng dụng trong các thiết bị nhúng, cảm biến nhiệt độ và hệ thống lưu trữ dữ liệu.
Tổng quan kiến trúc

Giao thức Master-Slave: Hệ thống gồm một thiết bị điều khiển chính (bus master) và nhiều thiết bị phụ (slave).
Mặc dù tên gọi là 1-Wire, nhưng thực tế 1-Wire network sử dụng hai dây để hoạt động:
🔹Dây trả về (Ground Return Line).
🔹Dây dữ liệu (Data Line).
Mặc dù có hai dây, nhưng chỉ có một dây để truyền dữ liệu, nên giao tiếp này được gọi là 1-Wire.
1. Dây dữ liệu
Đây là dây chính dùng để truyền dữ liệu giữa bus master và các thiết bị slave.
Dây này thường được gọi là DQ, Data hoặc OWIO (One-Wire I/O).
Điện áp trên dây này dao động từ 0V đến 5V.
Dữ liệu được truyền theo hai hướng (bi-directional), nhưng chỉ một chiều tại một thời điểm (half-duplex).
2. Dây trả về
Dây này giúp hoàn tất mạch điện để dòng điện có thể quay về master.
Nó thường được gọi là GND (ground) hoặc OWRTN (One-Wire Return).
Tuy tên gọi là “ground”, nhưng nó không nhất thiết phải là mass thật (earth ground), mà chỉ là điểm tham chiếu chung cho toàn hệ thống.
Chỉ có một điểm nối đất duy nhất trong mạng 1-Wire, và điểm đó nằm ở bus master.
3. Vai trò của bus Master
Bus master là thiết bị khởi tạo và điều khiển toàn bộ quá trình giao tiếp.
Nó hoạt động như một bộ giao tiếp giữa máy tính hoặc vi điều khiển với hệ thống 1-Wire.
Cả bus master và các slave đều có thể gửi và nhận dữ liệu, nên chúng hoạt động như bộ thu phát (transceiver).
4. Cách dữ liệu di chuyển trên bus
Giao tiếp nửa song công (Half-duplex): Dữ liệu có thể đi theo hai hướng, nhưng không thể truyền cùng lúc theo cả hai chiều.
Khi dữ liệu được gửi đi trong giao thức 1-Wire, nó không được truyền cả byte cùng một lúc mà phải gửi từng bit một theo thứ tự.
Bit ít quan trọng nhất (LSB – Least Significant Bit) được gửi trước.
Giao thức 1-Wire tự động điều phối việc truyền dữ liệu, đảm bảo rằng:
🔹Không có sự giao tiếp trực tiếp giữa các thiết bị slave – chúng chỉ có thể giao tiếp với master khi được gọi.
🔹Chỉ có một thiết bị được giao tiếp với master tại một thời điểm.
Những yêu cầu của bus

Mọi chân đầu ra trong giao thức 1-Wire đều phải là open-drain, nghĩa là chỉ có thể kéo xuống mức thấp (0V) nhưng không tự kéo lên mức cao (5V).
Để đưa tín hiệu lên mức cao, cần có một điện trở pull-up gắn vào đường tín hiệu.
a. Cách hoạt động
Nếu không có thiết bị nào kéo đường tín hiệu xuống thấp, điện trở pull-up sẽ kéo tín hiệu lên mức cao (logic 1).
Nếu có ít nhất một thiết bị kéo đường tín hiệu xuống thấp, thì tín hiệu sẽ ở mức thấp (logic 0).
Cách này giúp nhiều thiết bị có thể giao tiếp trên cùng một bus, nhưng chỉ một thiết bị truyền dữ liệu tại một thời điểm, trong khi các thiết bị khác ở trạng thái chờ (idle).
b. Cách chọn điện trở pull-up phù hợp
Tùy vào yêu cầu của hệ thống, ta chọn giá trị điện trở pull-up dựa trên các yếu tố sau:
Trường hợp 1: Tốc độ thấp, dây ngắn – điện trở pull-up: ≥ 10KΩ
Nếu thiết bị có nguồn riêng (không dùng nguồn từ đường tín hiệu – external powered), có thể dùng điện trở pull-up từ 10KΩ trở lên.
Điện trở càng lớn thì tín hiệu chuyển từ mức thấp lên mức cao sẽ chậm hơn. Nếu tốc độ truyền dữ liệu thấp, điều này không gây ảnh hưởng. Điện trở cao cũng giúp giảm tiêu thụ điện năng.
Trường hợp 2: Tốc độ cao, dây dài – điện trở pull-up: < 1KΩ
Nếu thiết bị có nguồn riêng và cần tốc độ truyền cao (chế độ Overdrive) hoặc hệ thống có dây dẫn dài, nên dùng điện trở nhỏ hơn 1KΩ.
Điện trở nhỏ hơn giúp tín hiệu thay đổi nhanh hơn, giảm thời gian trễ.
Trường hợp 3: Thiết bị dùng nguồn ký sinh (parasitic powered)
Trong chế độ Parasitic Power, thiết bị lấy điện từ đường dữ liệu và lưu trữ vào một tụ điện. Khi thiết bị cần thực hiện một nhiệm vụ tiêu tốn nhiều năng lượng (ví dụ: đọc cảm biến, ghi dữ liệu), điện trở pull-up có thể không đủ mạnh để cung cấp điện nhanh chóng. Lúc này, cần một bộ kéo lên chủ động (active driver) để cung cấp đủ dòng điện cho thiết bị hoạt động ổn định.
Xem thêm: Tìm hiểu về Universal Serial Bus (USB)
Mức tín hiệu trên bus

Hệ thống 1-Wire sử dụng mức logic tương thích với chuẩn CMOS/TTL, có nghĩa là nó có các mức điện áp xác định cho logic 0 và logic 1 như sau:
Logic 0 (Mức thấp – LOW):
🔹Nếu điện áp trên dây ≤ 0.8V, hệ thống hiểu là bit 0.
🔹Điện áp tối đa: 0.8V (gọi là VIL MAX – Input Low Voltage Maximum).
Logic 1 (Mức cao – HIGH):
🔹Điện áp tối thiểu: 2.2V (gọi là VIH MIN – Input High Voltage Minimum).
🔹Nếu điện áp trên dây ≥ 2.2V, hệ thống hiểu là bit 1.
Vùng không xác định (Indeterminate Area):
🔹Điện áp từ 0.8V đến 2.2V.
🔹Trong khoảng này, hệ thống không thể xác định chính xác là bit 0 hay bit 1, nên khi tín hiệu di chuyển qua vùng này, nó cần phải chuyển trạng thái thật nhanh để tránh lỗi.
Nếu một tín hiệu nằm trong vùng 0.8V – 2.2V quá lâu, hệ thống có thể:
🔹Hiểu sai dữ liệu.
🔹Gây nhiễu tín hiệu, ảnh hưởng đến toàn bộ mạng 1-Wire.
Giao thức 1-Wire
Giao thức 1-Wire có 4 loại tín hiệu chính để truyền và nhận dữ liệu qua dây OWIO.
1. Reset Sequence (Chuỗi reset)
Master gửi một Reset Pulse (xung reset) để đặt lại trạng thái của tất cả thiết bị trên bus.
Các thiết bị slave sẽ trả lời bằng cách gửi một Presence Pulse (xung hiện diện), báo hiệu rằng chúng đang hoạt động.
2. Write 0 (Ghi bit 0)
Master gửi một tín hiệu đặc biệt để ghi giá trị 0 xuống bus.
3. Write 1 (Ghi bit 1)
Master gửi một tín hiệu khác để ghi giá trị 1 xuống bus.
4. Read Data (Đọc dữ liệu)
Master muốn đọc dữ liệu từ slave.
Master thả dây ra và chờ slave trả về 0 hoặc 1.
Xem thêm: Tổng quan về Inter-Integrated Circuit (I2C)
Reset Sequence
1. Reset Sequence là gì?
Reset Sequence là bước khởi tạo quan trọng trước khi master có thể giao tiếp với các thiết bị slave.
Mục đích chính là để master kiểm tra xem có thiết bị nào đang kết nối trên bus hay không.
2. Quá trình Reset Sequence diễn ra như thế nào?

a. Master gửi Reset Pulse
Master kéo dây dữ liệu xuống mức thấp (0V) trong một khoảng thời gian tRSTL (thường vài trăm micro giây).
Đây gọi là Reset Pulse, giúp đặt lại trạng thái của tất cả các slave trên bus.
b. Master thả dây ra và chờ phản hồi
Sau khi gửi xung reset, master nhả dây để nó trở lại mức cao (5V), nhờ điện trở pull-up.
Master chuyển sang chế độ nhận (RX) và chờ phản hồi.
c. Slave gửi Presence Pulse (Tín hiệu hiện diện)
Khi slave phát hiện xung reset, nó sẽ chờ trong khoảng tRSH rồi kéo dây xuống thấp trong khoảng tRSL để báo hiệu sự có mặt của mình.
Sau đó, slave nhả dây ra để trở lại mức cao.
Xem thêm: Giao thức Serial Peripheral Interface (SPI)
Writing data (Ghi dữ liệu)
Trong giao thức 1-Wire, master ghi dữ liệu lên bus bằng cách điều khiển mức logic của dây dữ liệu.
Có 2 loại tín hiệu ghi (Write Time Slots):
🔹Write 1 → Ghi bit 1
🔹Write 0 → Ghi bit 0


1. Master bắt đầu ghi
Master kéo dây dữ liệu xuống thấp (0V) để bắt đầu một chu kỳ ghi.
Mỗi chu kỳ ghi phải kéo dài ít nhất 60 µs.
Sau mỗi lần ghi, cần ít nhất 1 µs để khôi phục lại trạng thái bus.
2. Master quyết định ghi 1 hay 0
Nếu dây được nhả lên cao trong vòng 15 µs → Slave sẽ hiểu đó là Write 1.
Nếu dây được giữ ở mức thấp trong toàn bộ thời gian ghi (60 µs) → Slave sẽ hiểu đó là Write 0.
3. Slave đọc tín hiệu
Slave kiểm tra trạng thái của dây trong khoảng từ 15 µs đến 60 µs sau khi master kéo xuống.
Nếu thấy mức cao → Hiểu là 1.
Nếu thấy mức thấp → Hiểu là 0.
Xem thêm: Tổng quan về Universal Asynchronous Receiver and Transmitter (UART)
Read data
Khi bus master muốn đọc dữ liệu từ slave, nó sẽ tạo ra một chu kỳ đọc (Read Time Slot).


1. Master bắt đầu chu kỳ đọc
Master kéo dây dữ liệu xuống thấp để báo hiệu bắt đầu đọc.
Dây phải giữ ở mức thấp ít nhất 1 µs cho đến 14 µs.
2. Slave trả dữ liệu
Sau khi master nhả dây, slave sẽ gửi dữ liệu (1 hoặc 0) trong khoảng 14 µs tiếp theo.
Master cần đọc trạng thái của dây sau 15 µs từ khi bắt đầu.
Cách slave gửi dữ liệu:
🔹Nếu slave muốn gửi 1 → Không kéo dây xuống thấp (dây sẽ tự lên cao nhờ điện trở pull-up).
🔹Nếu slave muốn gửi 0 → Kéo dây xuống thấp trong thời gian gửi dữ liệu.
3. Kết thúc chu kỳ đọc
Đến cuối chu kỳ đọc (60 µs), master không còn điều khiển dây nữa.
Dây dữ liệu sẽ quay lại mức cao nhờ điện trở pull-up.
Cần ít nhất 1 µs khôi phục trước khi đọc bit tiếp theo.
Quy trình giao tiếp trên bus 1-Wire diễn ra như thế nào?

1. Reset bus và kiểm tra thiết bị kết nối
Master kéo bus xuống mức thấp trong ít nhất 480 µs để khởi động lại bus.
Master nhả dây, sau đó chờ Presence Pulse từ bất kỳ thiết bị slave nào đang kết nối.
Nếu có ít nhất một slave, nó sẽ gửi Presence Pulse để báo hiệu rằng nó tồn tại trên bus.
2. Master xác định slave bằng địa chỉ ROM

Master gửi lệnh gọi địa chỉ bằng cách sử dụng các chuỗi Write 0 và Write 1.
Mỗi thiết bị 1-Wire có địa chỉ ROM 64-bit duy nhất, gồm 3 phần chính:
🔹1 byte đầu (LSB): Mã family (Family Code), cho biết loại thiết bị.
🔹6 byte tiếp theo: Địa chỉ duy nhất 48-bit, được lập trình từ nhà máy.
🔹1 byte cuối (MSB): Mã kiểm tra CRC, giúp phát hiện lỗi khi truyền dữ liệu.

3. Master gửi lệnh điều khiển và truyền dữ liệu
Sau khi xác định được slave cần giao tiếp, master gửi lệnh điều khiển phù hợp (đọc/ghi bộ nhớ, đo nhiệt độ, v.v.).
Master gửi các chuỗi thời gian (time slots) và phân tích phản hồi từ slave.
Chỉ một slave được chọn sẽ phản hồi, ngoại trừ một số trường hợp đặc biệt như tìm kiếm địa chỉ (Search ROM), bỏ qua địa chỉ (Skip ROM).
Xem thêm: Tổng quan về Run Mode và Low Power Mode trong vi điều khiển
Enumeration
Enumeration là quá trình tìm địa chỉ 64-bit của các thiết bị trên bus 1-Wire để nhận diện chúng. Điều này rất quan trọng khi có nhiều thiết bị cùng kết nối trên bus và cần được truy cập riêng biệt.
1. Sử dụng thuật toán Binary Search Tree

Enumeration sử dụng Search Address (0xF0) để tìm tất cả các thiết bị bằng cách thực hiện một thuật toán tìm kiếm nhị phân (Binary Search Tree).
Quá trình này lặp lại 64 lần (tương ứng với 64 bit của địa chỉ thiết bị):

Giả sử ta có 3 thiết bị với địa chỉ lần lượt: 0b000, 0b1000, 0b110.
Lần 1: So sánh các bit đầu tiên (bit 0 – LSB):
🔹Kết quả AND logic: 0 & 0 & 0 = 0.
🔹Kết quả bit bù: 1 & 1 & 1 = 1.
→ Chọn nhánh 0.
3 thiết bị được tiếp tục vì các bit đầu tiên đều chứa “0”.
Lần 2: So sánh các bit thứ 1:
🔹Kết quả AND logic: 0 & 0 & 1 = 0.
🔹Kết quả bit bù: 1 & 1 & 0 = 0.
→ Dựa vào hình 13, kết quả là 0/0 nên xảy ra xung đột → Đánh dấu lần xung đột đầu tiên → Chọn nhánh “0” để tiếp tục.
Thiết bị có địa chỉ 0b000 và 0b1000 tiếp tục vì có chứa bit vừa so sánh là “0”.
Lần 3: So sánh các bit thứ 2:
🔹Kết quả AND logic: 0 & 1 = 0.
🔹Kết quả bit bù: 1 & 0 = 0.
→ Dựa vào hình 13, kết quả là 0/0 nên xảy ra xung đột → Đánh dấu lần xung đột thứ 2 → Chọn nhánh “0” để tiếp tục.
Thiết bị có địa chỉ 0b000 tiếp tục vì có chứa bit vừa so sánh là “0”.
→ Ta tìm được địa chỉ thiết bị đầu tiên 0b000.
Lần 4: Quay trở lại lần xung đột thứ 2
🔹Kết quả AND logic: 0 & 1 = 0.
🔹Kết quả bit bù: 1 & 0 = 0.
Kết quả là 0/0 nên xảy ra xung đột.
→ Chọn nhánh “1” để tiếp tục.
→ Thiết bị có địa chỉ 0b100 tiếp tục vì có chứa bit “1”.
→ Ta tìm được địa chỉ thiết bị thứ hai là 0b100.
Lần 5: Quay trở lại lần xung đột thứ 1
🔹Kết quả AND logic: 0 & 0 & 1 = 0.
🔹Kết quả bit bù: 1 & 1 & 0 = 0.
Kết quả là 0/0 nên xảy ra xung đột
→ Chọn nhánh “1” để tiếp tục.
→ Thiết bị có địa chỉ 0b110 tiếp tục vì có chứa bit “1”.
Lần 6: So sánh bit thứ 3
🔹Kết quả AND logic: 1 = 1.
🔹Kết quả bit bù của 1 = 0.
Kết quả là 1/0 nên chọn nhánh “1” để tiếp tục
→ Ta tìm được địa chỉ thiết bị thứ ba là 0b110.
2. Fast Search Algorithm
Bước 1: Thiết lập chế độ phân xử (Arbitration Mode)
Host (Master) gửi lệnh SKIP ADDRESS để bỏ qua việc chỉ định địa chỉ cụ thể của từng thiết bị.
Host ghi giá trị 11b vào cấu hình ARB_MODE trong configuration register-2 của tất cả các thiết bị trên bus.
Điều này thiết lập chế độ phân xử, cho phép các thiết bị tự động cạnh tranh quyền truy cập bus.
Bước 2: Tìm kiếm địa chỉ thiết bị
Host gửi lệnh SEARCH ADDRESS, yêu cầu tất cả các thiết bị gửi bit đầu tiên của địa chỉ của chúng.
Tất cả các thiết bị cùng gửi bit đầu tiên (LSB) của địa chỉ của chúng:
🔹Nếu gửi 0: Thiết bị vẫn giữ quyền điều khiển bus (vì 0 là mức ưu tiên cao hơn).
🔹Nếu gửi 1: Nếu có thiết bị khác gửi 0, thiết bị này sẽ bị loại khỏi quá trình tìm kiếm (vì 0 là mức ưu tiên hơn 1).
Host đọc lại giá trị thực tế trên bus, xác định nhóm thiết bị nào vẫn còn trong quá trình tìm kiếm.
Lặp lại quá trình trên với từng bit tiếp theo của địa chỉ cho đến khi chỉ còn lại một thiết bị duy nhất.
Thiết bị cuối cùng gửi thành công toàn bộ địa chỉ 64-bit của nó, sau đó đánh dấu thành công trong thanh ghi trạng thái của nó.
Bước 3: Tìm kiếm thiết bị tiếp theo
Host gửi lệnh SEARCH ADDRESS lần nữa, nhưng lần này thiết bị đã tìm thấy địa chỉ trước đó sẽ không tham gia nữa.
Các thiết bị còn lại lặp lại quá trình trên để tìm địa chỉ tiếp theo.
Quá trình lặp lại cho đến khi tất cả thiết bị trên bus đã được tìm ra.
Lợi ích của thuật toán tìm kiếm nhanh:
🔹Nhanh hơn 3 lần so với thuật toán tìm kiếm truyền thống (Binary Tree Search).
🔹Tiết kiệm bộ nhớ và tài nguyên xử lý vì không cần quản lý cây nhị phân để tìm kiếm.
🔹Tự động loại bỏ thiết bị không đủ điều kiện thay vì cần theo dõi từng nhánh tìm kiếm.
Giao thức 1-Wire với thiết kế đơn giản, tiết kiệm năng lượng và khả năng hoạt động chỉ với một dây dữ liệu mang lại nhiều lợi ích trong các hệ thống nhúng, đặc biệt là trong các ứng dụng cảm biến và lưu trữ dữ liệu. Mặc dù tốc độ truyền không cao, nhưng sự tiện lợi trong việc triển khai và khả năng nhận diện nhiều thiết bị trên cùng một bus giúp nó trở thành lựa chọn lý tưởng trong nhiều ứng dụng thực tế. Nếu bạn đang tìm kiếm một phương pháp truyền thông hiệu quả và đơn giản, 1-Wire có thể là giải pháp phù hợp.
Xem thêm: Controller Area Network (CAN) bus – Hệ Thần Kinh Của Ô Tô Hiện Đại