1-Wire

**1-Wire** là một hệ thống bus giao tiếp với thiết bị được thiết kế bởi Dallas Semiconductor Corp. 1-Wire hỗ trợ truyền dữ liệu tốc độ thấp (16.3 kbit/s), truyền tín hiệu, và nguồn nuôi qua cùng một chân tín hiệu đơn. 1-Wire cũng tương tự như I²C, nhưng với tốc độ truyền dữ liệu thấp và khoảng cách xa hơn. Nó thường được sử dụng để giao tiếp với các thiết bị nhỏ giá rẻ như nhiệt kế kĩ thuật số và công cụ đo thời tiết. Một mạng lưới của các thiết bị 1-Wire với một thiết bị điều khiển chính được gọi là một *MicroLAN*.

Một tính năng đặc biệt của bus là khả năng chỉ sử dụng hai dây tín hiệu: data và GND. Để thực hiện điều này, các thiết bị 1-Wire bao gồm một tụ điện 800pF để trữ điện, và cung cấp nguồn trong quá trình đường data đang hoạt động.

## Ứng dụng
Dựa trên chức năng, các thiết bị 1-Wire thường đóng gói thành một phần tử duy nhất dạng mạch tích hợp và kiểu TO-92, và một số trường hợp là một hình thức di động gọi là *iButton* tương tự như pin đồng hồ. Các nhà sản xuất cũng sản xuất các thiết bị phức tạp hơn là dạng một thành phần đơn sử dụng bus 1-Wire để giao tiếp.

Các thiết bị 1-Wire có thể là một trong nhiều thành phần trong một bảng mạch bên trong một sản phẩm, có thể là một thành phần duy nhất bên trong một thiết bị như đầu dò nhiệt độ, hoặc cũng có thể được gắn luôn vào thiết bị cần giám sát. Một số hệ thống thí nghiệm và hệ thống điều khiển, thu thập dữ liệu kết nối với các thiết bị 1-Wire sử dụng các cáp với các module kết nối hoặc cáp CAT -5, với các thiết bị tự gắn trên một socket, định hình trong một hộp nhỏ, hoặc gắn trên đối tượng được giám sát. Trong các hệ thống như vậy, chân cắm RJ11 (module cắm 6P2C hoặc 6P4C, thường được sử dụng cho điện thoại) được sử dụng phổ biến nhất.

Các hệ thống cảm biến và truyền động có thể được xây dựng bằng cách nối các thành phần 1-Wire lại với nhau. Mỗi thành phần đều chứa toàn bộ các logic cần thiết để vận hành trên bus 1-Wire. Ví dụ như theo dõi nhiệt độ, thời gian, điện áp và các cảm biến hiện tại, theo dõi pin và bộ nhớ. Chúng có thể được kết nối đến một máy tính bằng cách dùng bus converter. Giao tiếp USB, RS-232 nối tiếp, và parallel port là các giari pháp phổ biến để kết nối MicroLan đến máy tính. Các thiết bị 1-Wire cũng có thể được kết nối trực tiếp với vi điều khiển.

**iButton** (còn được gọi là **Dallas Key**) là một tiêu chuẩn đóng gói cơ khí có chứa một thành phần 1-Wire bên trong một "nút bấm" bằng thép không gỉ nhỏ tương tự như pin đồng hồ hình cúc áo. iButton được kết nối đến hệ thống bus 1-Wire bằng cách sockets kết nối với nút bấm khi được nhấn. Ngoài ra, kết nối có thể được gắn bán cố định với một socket mà iButton kẹp vào, nhưng dễ dàng được gỡ bỏ.

**Nhẫn** **Java**, một chiếc nhẫn được gắn iButton với Java Virtual Machine tương thích với đặc tả Java Card 2.0 bên trong đã được trao cho những người tham dự hội nghị JavaOne năm 1998.

Mỗi chip 1-Wire có một mã ID duy nhất. Tính năng này làm cho chip, đặc biệt là trong một iButton, phù hợp để sử dụng như một chìa khóa để mở khóa, cánh tay, và tắt báo động trộm, xác thực người dùng các hệ thống máy tính,... iButton có thể được sử dụng như vé thông minh Akbil cho phương tiện giao thông công cộng ở Istanbul.

### Bộ nguồn Dell
Các bộ nguồn laptop Dell chính hãng sử dụng giao thức 1-Wire để gửi dữ liệu thông qua dây thứ ba đến laptop (về năng lượng, dòng và điện áp). Laptop sẽ từ chối sạc nếu củ sạc không đáp ứng được các yêu cầu này.

## Giao thức kết nối
Trong MicroLan bất kì, luôn có một thiết bị chủ (master), có thể là một máy tính hoặc một vi điều khiển. Thiết bị chủ khởi tạo hoạt động trên bus, đơn giản hóa việc tránh va chạm trên bus. Các giao thức được xây dựng vào phần mềm để phát hiện các va chạm. Sau một vụ va chạm, thiết bị chủ thực hiện lại các giao tiếp cần thiết.

Nhiều thiết bị có thể chia sẻ cùng một bus. Mỗi thiết bị trên bus có một mã serial 64-bit duy nhất. Byte thấp nhất của mã serial là một mã 8-bit cho biết loại thiết bị. Byte cao nhất là một tiêu chuẩn CRC 8-bit (cho bus 1-wire).

Có một số lệnh broadcast tiêu chuẩn, cũng như lệnh để đến địa chỉ của một thiết bị cụ thể. Thiết bị chủ có thể gửi một lệnh lựa chọn, sau đó là địa chỉ của thiết bị cụ thể. Lệnh tiếp theo được thực hiện chỉ bởi thiết bị có địa chỉ này.

Giao thức liệt kê bus 1-wire (mô tả sau), giống như các giao thức đơn khác, là một thuật toán thiết bị chủ dùng để đọc địa chỉ của mọi thiết bị trên bus. Kể từ khi địa chỉ bao gồm loại thiết bị và một CRC, khôi phục bảng địa chỉ cũng sản sinh một bảng địa chỉ tin cậy của các thiết bị trên bus. Không gian địa chỉ 64-bit được tìm kiếm như một cây nhị phân, cho phép lên đến 75 thiết bị được tìm thấy trong một giây.

Mạng 1-Wire Dallas được thực hiện tự nhiên giống như một thiết bị chủ open drain được kết nối với một hoặc nhiều thiết bị open drain phụ thuộc (slave). Một điện trở kéo lên đơn dùng chung cho tất cả các thiết bị và hoạt động để kéo bus lên đến 3 - 5V, và có thể cung cấp năng lượng cho các thiết bị phụ thuộc. Giao tiếp diễn ra khi một thiết bị chủ hoặc phụ thuộc xác nhận bus thấp, nghĩa là kết nối điện trở kéo lên vào cực nối đất thông qua MOSFET đầu ra của nó. Các chip driver và cầu 1-Wire chính xác cũng sẵn sàng. Tốc độ truyền dữ liệu có thể đạt đến 16.3&nbsp;kbit/s. Ngoài ra còn có một chế độ ép tốc độ giao tiếp tăng gấp 10 lần.

Thiết bị chủ bắt đầu truyền với một xung *reset*, xung mà kéo dây tín hiệu xuống 0 volt trong ít nhất 480&nbsp;µs. Việc này reset toàn bộ thiết bị phụ thuộc trên bus. Sau đó, bất kì thiết bị phụ thuộc, nếu có, cho biết rằng nó tồn tại với một xung "hiện diện (presence)": nó giữ bus thấp trong ít nhất 60&nbsp;µs sau khi thiết bị chủ giải phóng bus.

Để gửi "1", thiết bị chủ bus gửi một xung thấp rất ngắn (1–15 µs). Để gửi "0", thiết bị chủ gửi một xung thấp 60&nbsp;µs. Cạnh đi xuống (tiêu cực) của xung được sử dụng để bắt đầu một monostable multivibrator trên thiết bị phụ thuộc. Multivibrator trong đồng hồ của thiết bị phụ thuộc để đọc dòng dữ liệu trong khoảng 30&nbsp;µs sau khi cạnh xung đi xuống. Multivibrator của thiết bị phụ thuộc không thể tránh khỏi có dung sai tương tự ảnh hưởng đến thời gian chính xác của nó, đó là lý do tại sao xung "0" phải dài 60 µs, và xung "1" không thể dài hơn 15 µs.

Khi một giao tiếp 1-Wire chuyên dụng không có sẵn, một UART có thể được sử dụng để thực hiện một thiết bị chủ bus 1-wire. Chip "cầu nối (bridge)" USB hoặc nối tiếp cũng sẵn sàng để xử lý các yêu cầu thời gian và dạng sóng của bus 1-Wire bus, và đặc biệt hữu ích trong việc sử dụng cáp dài (trên 100m) hiệu quả. Lên đến 300m bus dài bao gồm cáp điện thoại xoắn đôi đơn giản đã được thử nghiệm bởi nhà sản xuất. Tuy nhiên nó sẽ yêu cầu điều chỉnh điện trở kéo từ 5 thành 1 kΩ.

Khi nhận dữ liệu, thiết bị chủ gửi một xung 0 volt 1–15-µs để bắt đầu mỗi bit. Nếu đơn vị truyền phụ thuộc muốn gửi "1", nó không làm gì, và bus quay lại điện áp cao. Nếu thiết bị truyền phụ thuộc muốn gửi "0", nó kéo đường data xuống điện áp thấp trong 60 µs.

Trình tự cơ bản là một xung reset theo sau bởi một lệnh 8-bit, và sau đó dữ liệu được gửi hoặc nhận trong các nhóm 8-bit.

Khi một chuỗi dữ liệu đang được truyền, các lỗi có thể được phát hiện với một CRC (bảo vệ dữ liệu yếu) 8-bit.

Để tìm các thiết bị, thiết bị chủ quảng bá (broadcasts) một lệnh enumeration, và sau đó là một địa chỉ, "lắng nghe" sau mỗi bit của một địa chỉ. Nếu thiết bị phụ thuộc có tất cả các bit đó, nó trả về "0". Thiết bị chủ sử dụng hành vi đơn giản này để tìm kiếm một cách hệ thống cho các chuỗi hợp lệ của các bit địa chỉ. Quá trình này là nhanh hơn nhiều so với một tìm kiếm brute force cho toàn bộ 64-bit địa chỉ cần thiết bởi vì ngay sau khi một bit không hợp lệ được phát hiện, toàn bộ các bit địa chỉ đằng sau là không hợp lệ. Một lượt điều tra của 10 đến 15 thiết bị kết thúc rất nhanh chóng.

Vị trí của các thiết bị trên bus đôi khi là quan trọng. Với những trường hợp này, nhà sản xuất có một thiết bị đặc biệt mà cho phép đi qua hoặc tắt nó đi. Phần mềm do đó có thể khám phá các *[[Broadcast domain|miền]]* bus nối tiếp.

## Ví dụ giao tiếp với một thiết bị
Các tín hiệu sau đây được tạo ra bởi một FPGA, cái mà là thiết bị chủ cho giao tiếp với một chip DS2432 (EEPROM), và đo bằng một máy phân tích logic. Một logic cao trên đầu ra 1-wire output, có nghĩa là đầu ra của FPGA là trong chế độ ba trạng thái (tri-state) và thiết bị 1-wire có thể kéo bus xuống thấp. Một thấp nghĩa là FPGA kéo xuống bus. Đầu vào 1-wire là tín hiệu bus đo được. Trên thời gian lấy mẫu đầu vào cao, FPGA lấy mẫu đầu vào để phát hiện sự phản hồi từ thiết bị và nhận các bit.

## Các công cụ phát triển
Khi phát triển và/hoặc gỡ lỗi bus 1-Wire kiểm tra các tín hiệu phần cứng có thể rất quan trọng. Logic analyzers và bus analyzers là những công cụ thu thập phân tích, giải mã, và lưu trữ các tín hiệu để đơn giản hóa việc nhìn các sóng sin tốc độ cao.

## Xem thêm
* Single wire earth return, một kĩ thuật để truyền tải điện năng với chỉ "1 dây" mà không có một đường nối đất
* Touch memory

## Tham khảo

## Liên kết ngoài
* 1-Wire Device 
* Accessing, Reading, and Writing to 1-Wire devices using a UART 
* Using a UART to Implement a 1-Wire Bus Master
* iButton , iButtonLink
* Guidelines for Reliable Long Line 1-Wire Networks 
* Choosing the Right 1-Wire Master for Embedded Applications 
* OWFS - 1-wire filesystem for Linux
* Guides to working with 1-Wire, for programmers and engineers
* Getting 1-wire sensors working in Linux using OWFS 
* 1-Wire Arduino tutorial