Cách thực hiện: Cướp biển xe buýt, Giao diện nối tiếp phổ quát

author
21 minutes, 18 seconds Read

Cập nhật: Phần sụn mới với JTAG và nhiều hơn nữa

Chúng tôi luôn ngây ngất khi có được một chip mới hoặc thẻ SIM để giao diện, nhưng sự nhiệt tình của chúng tôi thường bị giảm bớt bởi quá trình tạo mẫu. Giao tiếp bất kỳ chip nào bình thường chỉ ra bảng mạch một mạch, viết mã và xử lý lập trình viên; thậm chí có thể là một pcb tạo mẫu.

Vài năm trước, chúng tôi đã xây dựng “cướp biển xe buýt” đầu tiên, một giao diện xe buýt phổ quát nói chuyện với rất nhiều chip từ một thiết bị đầu cuối nối tiếp PC. Một số giao thức nối tiếp thông thường được hỗ trợ ở mức 3,3-5Volts, bao gồm i2C, SPI và nối tiếp không đồng bộ. Các thư viện “RAW” 2- và 3- “có thể giao tiếp gần như mọi giao thức nối tiếp độc quyền. Xem xét rằng đây là một công cụ có lợi cho chúng tôi, chúng tôi đã dọn sạch mã, ghi lại thiết kế và phát hành nó ở đây với thông số kỹ thuật, sơ đồ và mã nguồn.

Tổng quan về khái niệm

Cướp biển xe buýt là cầu nối nối tiếp cho nhiều giao thức giao diện IC. Chúng tôi nhập các lệnh vào một thiết bị đầu cuối nối tiếp trên máy tính. Các lệnh đi đến cướp biển xe buýt thông qua cổng nối tiếp PC. Cướp biển xe buýt nói chuyện với một vi mạch trong giao thức thích hợp và trả về kết quả cho PC.

Tất cả các chân đầu ra 3.3volts, nhưng là 5Volt dung sai. Nguồn cung cấp năng lượng 3.3Volt và 5Volt có sẵn để cung cấp năng lượng cho chip được kết nối. Phần mềm Cấu hình điện trở I2C Pull-Up Hoàn thành gói.

Giao diện thiết bị đầu cuối nối tiếp hoạt động với bất kỳ hệ thống nào: PC, Mac, Linux, Palm Pilots, Wince Devices, v.v; Không yêu cầu crapware. Chúng tôi đã xem xét một thiết bị USB, nhưng USB không tương thích với số lượng thiết bị cầm tay đáng kể có cổng nối tiếp. Chúng tôi cũng muốn một thiết bị 3.3Volt với các đầu vào dung sai 5Volt, nhưng rất nhiều vi mô USB thông qua lỗ phổ biến là 5Volt các bộ phận (ví dụ: PIC18FX550).

Cướp biển xe buýt hiện đang ‘nói’ ba giao thức phần cứng để giao tiếp tốc độ cao và có hai thư viện giao thức phần mềm để thao tác xe buýt dễ dàng. Lý thuyết và đặc điểm kỹ thuật của mỗi giao thức vượt quá những gì chúng ta có thể che ở đây, nhưng hãy xem một số hướng dẫn này:

I2C.

Một chiếc xe buýt 2 dây chậm. Wikipedia là một nơi tuyệt vời để bắt đầu cho nền I2C. I2C-BUS.org, Robot Electronics, Academy HỆ THỐNG nhúng và Embedded.com có ​​các hướng dẫn I2C đáng kính.

SPI.

Một chiếc xe buýt 3 dây cơ bản. Wikipedia có nền; Embedded.com có ​​một hướng dẫn tuyệt vời và so sánh với I2C.

Máy phát không đồng bộ phổ quát (UART hoặc serial)

Giao thức nối tiếp đồng hồ và thời gian phụ thuộc vào thời gian được biết đến nhiều nhất với giao thức của nó là giao thức cổng nối tiếp PC. Wikipedia có nền trên các giao thức nối tiếp không đồng bộ.

Raw 2 dây.

Đây là một thư viện giao thức 2 dây chung, tương tự như I2C nhưng không có bit ACK. I2C và rất nhiều giao thức 2 dây độc quyền có thể được hình thành bằng cách sử dụng các thao tác xe buýt có sẵn trong chế độ này. Sử dụng thư viện này để làm việc với các thiết bị dây I2C 2, như Smartcards hoặc cảm biến nhiệt độ / độ ẩm SYM11 SHT11.

Raw 3 dây.

Đây là thư viện giao thức 3 dây chung chung, tương tự như SPI nhưng không có các ràng buộc của mô-đun phần cứng. Sử dụng thư viện này để làm việc với các thiết bị sử dụng các giao thức 3 dây tương thích không phải là 8 bit, như LCD Sparkfun Nokia 6100 LCD. Rất nhiều giao thức 3 dây có thể được hình thành bằng cách sử dụng các thao tác xe buýt có sẵn trong chế độ này.

Phần cứng

Nhấp vào hình ảnh vị trí PCB kích thước đầy đủ (PNG). Thiết bị đầu cuối trục vít kết nối với nguồn điện. Một hàng gồm bảy tiêu đề pin kết nối với các chân IO. Mặc dù nhãn, chỉ cần 7Volts DC.

GHIM

SPI.

I2C.

RS232.

B9.

Mosi.

SDA.

B8.

Clk.

Scl.

B7.

Miso.

Rx.

B6.

Cs.

Tx.

B5.

AUX.

AUX.

AUX.

Đất

Gnd.

Gnd.

Gnd.

Bảng này hiển thị các kết nối pin cho mỗi chế độ xe buýt. Chế độ dây RAW 2 sử dụng cấu hình mã PIN giống như I2C. Chế độ dây RAW 3 sử dụng cấu hình mã PIN giống như SPI.

Nhấp vào hình ảnh mạch kích thước đầy đủ (PNG). Mạch và PCB được tạo bằng phiên bản phần mềm miễn phí của Cadsoft Eagle. Tải về kho lưu trữ dự án (ZIP).

Pic 24fj64ga002.

Chúng tôi đã sử dụng một vi điều khiển PIC24FJ64GA002 trong Cướp biển xe buýt; Đây là con chip tương tự mà chúng tôi đã sử dụng trong dự án máy chủ mini của chúng tôi. Nó đủ nhanh để làm mọi thứ chúng ta muốn (16Mips) và tính năng chọn pin ngoại vi cho phép các mô-đun SPI, UART và I2C phần cứng để chia sẻ các chân đầu ra. Mỗi pin công suất cần một tụ tách tách (C12,13) ​​và hàm MCLR yêu cầu điện trở (R7) giữa PIN 1 và 3.3Volts. Bức ảnh có một bộ điều chỉnh điện áp bên trong đòi hỏi một tụ điện tantalum 10uf (C3), mặc dù chúng tôi đã sử dụng một tụ điện phân trơn không có vấn đề gì. Đọc về lập trình và làm việc với chip này trong hướng dẫn PIC24F của chúng tôi. Nếu bạn không có trình gỡ lỗi ảnh, một số độc giả đề xuất các bản sao ICD2 dưới $ 40 trên eBay.

Bức ảnh chạy ở 3.3Volts, nhưng các chân chỉ dành cho kỹ thuật số là dung sai 5Volt để giao tiếp logic 5Volt. Ghim 14,15,16,16,17,18,21 và 22, chỉ là kỹ thuật số, mà chúng ta chỉ tìm ra bằng cách xem qua biểu dữ liệu và loại bỏ bất kỳ chân nào bằng loại kết nối analog (Bảng 1-2, trang 11-16). Theo bảng dữ liệu,Ghim I2C cũng được 5Volt Dolitant. Có một loạt các thông tin mâu thuẫn trên web, nhưng biểu dữ liệu trang 230, tham số DI28, nói rõ rằng đầu vào tối đa cho pin 24FJ64GA002 I2C không có mạch tương tự là 5,5Volts.

PIN 21 và 22 (RB10 / 11) có thể kéo lên SDA / SCL thông qua điện trở R4 và R5.

MAX3223CPP.

Chip này chuyển đổi đầu ra nối tiếp 3.3Volt thành tín hiệu +/- 10VOLT RS232 tương thích với cổng nối tiếp PC. MAX3223CPP là phiên bản 3-5Volt của MAX202, với các tính năng tiết kiệm năng lượng bổ sung. Bộ thu phát Max RS232 yêu cầu bốn tụ điện 0,1UF cho bơm sạc (C4,5,7,8) và một tụ tách tách (C17). Chúng tôi đã sử dụng cùng một tụ điện cho tất cả mọi thứ.

Chúng tôi đã sử dụng MAX3223CPP, dường như không còn khả dụng nữa. MAX3223EPP + là phiên bản mới nhất tương thích với pin, có sẵn tại Digikey với giá 7 đô la. Ouch! Không có tính năng tiết kiệm điện của 3223 được sử dụng, do đó, bộ thu phát 3,3Volt RS232 rẻ hơn, đơn giản hơn phải được thay thế nếu bằng mọi cách có thể.

Nguồn điện

Hầu hết các chip có thể được cung cấp năng lượng từ nguồn cung cấp 3.3Volt và 5Volt của Bus Pirate. 5Volts được cung cấp bởi một bộ điều chỉnh chung 7805 (VR2) và hai tụ điện tách rời (C9,10). Bộ điều chỉnh LM317 (VR1) được đặt thành 3,3Volts sử dụng hai điện trở (R2,3) và yêu cầu hai tụ tách rời (C6,7). Mạch đòi hỏi nguồn cung cấp DC 7-10Volt (J1).

Một phần danh sách

Phần
Giá trị

IC1.
Pic24fj64ga002-nhúng.

IC2.
MAX3223CPP (thử MAX3223EPP +)

C3.
Tụ điện 10UF (tốt nhất là tantalum)

C4-13,17.
Tụ 0,1UF.

R1.
Điện trở 330 ohm

R2.
Điện trở 240 ohm.

R3.
Điện trở 390 ohm.

R4,5,7.
Điện trở 2k2 ohm.

VR1.
Lm317.

VR2.
Lm7805.

X1.
Kẹp vít (3 thiết bị đầu cuối) * chưa được kiểm tra

X2.
Đầu nối nữ DB9 (Cổng nối tiếp) * chưa được kiểm tra

ICSP, SV3.
.1 “Header Pin, Góc lý tưởng

J1.
Jack điện, pin 2.1mm

LED1.
Đèn LED 3 mm (tùy chọn)

Firmware

Phần sụn được viết bằng C bằng phiên bản trình diễn miễn phí của trình biên dịch ảnh C30. Tìm hiểu tất cả về làm việc với bức ảnh này trong phần giới thiệu của chúng tôi về loạt ảnh 24F. Tải về kho lưu trữ dự án (ZIP).

main.c – Xử lý giao diện đầu cuối người dùng.

buspirate.c – thói quen trừu tượng chuyển đổi cú pháp thành các hành động trên bus thích hợp.

UARTIO.C – IO Thói quen cho cả hai UART phần cứng.

m_i2c_1.c – Phần mềm I2C thói quen của [Michael Pearce]. Chúng tôi không thể có được phần cứng ảnh I2C để hoạt động, vì vậy chúng tôi đã sử dụng thư viện có giá trị này. Phần mềm không tính đến cài đặt tốc độ I2C và dường như hoạt động ở khoảng 5kHz.

Spi.c – các thói quen lái mô-đun SPI phần cứng.

Raw2Wire.c – Thư viện giao diện 2 dây.

RAW3WIRE.C – Thư viện giao diện 3 dây (SPI).

Đầu vào của người dùng được giữ trong bộ đệm 4000 byte cho đến khi phát hiện ký tự dòng mới (ENTER). Nếu ký tự đầu tiên của đầu vào là tùy chọn menu (xem bên dưới), hộp thoại menu được hiển thị, nếu không chuỗi được phân tích cú pháp để gửi dữ liệu để gửi qua bus (xem cú pháp). Bộ luật bao gồm một số lượng đáng xấu hổ các câu lệnh chuyển đổi và mã spaghetti.

Giao diện đầu cuối

Thay vì viết một phần mềm rác để điều khiển thiết bị, chúng tôi đã cung cấp cho nó giao diện dòng lệnh nối tiếp sẽ hoạt động với bất kỳ thiết bị đầu cuối ASCII nào. Cướp biển xe buýt phản hồi các lệnh với mã kết quả ba chữ số và một thông báo ngắn. Các mã được tạo bằng tự động hóa PC. Chúng tôi đã bao gồm một bảng mã kết quả trong kho lưu trữ dự án (ZIP).

Tùy chọn menu

Tùy chọn menu là các lệnh ký tự đơn không liên quan đến chuyển dữ liệu. Nhập ký tự, theo sau là , để truy cập menu.

Trong – Hiển thị menu Trợ giúp với các lệnh và cú pháp.

M – Đặt chế độ bus (SPI, I2C, UART, RAW 2 dây, 3 dây thô). theo dõi ngay bởi một dấu nhắc về tốc độ, phân cực và trạng thái đầu ra (phụ thuộc chế độ).

Tốc độ xe buýt: SPI: 30, 125, 250, 1000KHZ. I2C: 100, 400, 1000KHZ. UART: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200bps. Các chế độ thô: 1, 10, 50kHz.

Cài đặt đồng hồ nghịch đảo Đặt trạng thái nhàn rỗi đối diện với bình thường (SPI bình thường: Idle thấp; UART bình thường: Idle High): SPI: nhàn rỗi cao; UART: Idle thấp.

Một số chế độ có các chế độ đầu ra Z-Z tùy chọn để sử dụng với các điện trở kéo lên (thấp = mặt đất, cao = đầu vào).

L – Chuyển đổi bit Truyền / Nhận đơn hàng: Bit ít nhất / ít quan trọng nhất trước.

P – SDA / SCL PIN PULL-UP UP UP TRUSGORLE (3.3VOLTS). Chỉ có giá trị trong các chế độ I2C và RAW 2 dây.

O – Đặt định dạng hiển thị đầu ra số. Thiết bị đầu cuối có thể hiển thị các số dưới dạng giá trị thập phân, thập lục phân và nhị phân ASCII. Một định dạng thứ tư gửi byte thô, chưa qua chế biến để đọc văn bản được định dạng ASCII.

Cú pháp

Một cú pháp cơ bản được sử dụng để giao tiếp với chip qua xe buýt. Các lệnh cú pháp có các hàm chung thường áp dụng cho tất cả các loại xe buýt.

A / a / @ – Toggle Pin phụ trợ. Capital “A” Đặt AUX CAO, NHỎ “A” đặt thành mặt đất. @ Đặt AUX thành đầu vào (chế độ trở kháng cao) và đọc giá trị mã PIN.

[- Bắt đầu ghi dữ liệu. SPI / RAW 3 Dây: Chip Chọn Kích hoạt. I2C / RAW 2 Dây: Điều kiện bắt đầu. RS232: Mở UART, loại bỏ byte nhận được.

{- Bắt đầu ghi dữ liệu với đọc. Tương tự như [, ngoại trừ: SPI / RAW 3 Dây: Hiển thị byte đọc cho mỗi lần viết. RS232: Hiển thị dữ liệu khi nó đến Asynchrơ.

] hoặc} – Viết dữ liệu kết thúc. SPI / RAW 3 Dây: Chip Chọn bị vô hiệu hóa. I2C / RAW 2 Dây: Điều kiện dừng. RS232: Đóng UART.

R / r – đọc byte. SPI / RAW 3 Dây: Gửi byte giả, trả lại. I2C: Đọc byte với ACK. Dây RAW 2: Đọc 8 bit. RS232: Kiểm tra UART cho Byte và trả về hoặc thất bại nếu trống. Sử dụng 0r1 … 255 cho số lượng lớn đọc tới 255 byte.

0b – Viết giá trị nhị phân này. Định dạng là 0B0000000000 cho một byte, nhưng byte một phần cũng ổn: 0B1001.

0h hoặc 0x – Viết giá trị hex này. Định dạng là 0H01 hoặc 0x01. Byte một phần là tốt: 0xa. A-F có thể là chữ thường hoặc chữ in hoa.

0-255 – Viết giá trị thập phân này. Bất kỳ số nào không được đi trước 0x, 0h hoặc 0B được hiểu là một giá trị thập phân.

, hoặc dấu phân cách giá trị. Sử dụng một hôn nhân hoặc không gian để phân tách các số. Bất kỳ sự kết hợp nào là tốt, không cần phân định giữa các giá trị không phải số: {0xa6,0, 0 16 5 0b111 0haf}.

Các lệnh thao tác xe buýt trực tiếp cho chế độ dây RAW 2 và chế độ 3 dây thô.
^ – Gửi một đánh dấu đồng hồ. Sử dụng 0 ^ 1 … 255 cho nhiều đánh dấu đồng hồ.

/ và \ – Chuyển đổi mức đồng hồ cao (/) và thấp (\). Bao gồm độ trễ đồng hồ (100us).

– / _ – Chuyển đổi trạng thái dữ liệu cao (-) và thấp (_). Bao gồm độ trễ thiết lập dữ liệu (20US).

Những – Đọc một bit với đồng hồ.

. – Đọc trạng thái mã PIN dữ liệu (không có đồng hồ).

& – trì hoãn 1us. Sử dụng 0 & 1 … 255 cho nhiều sự chậm trễ.

Sử dụng nó

Dưới đây là hai ví dụ cho thấy cướp biển xe buýt trong hành động. Thiết bị đầu cuối phải được đặt thành Chế độ ASCII với tiếng vang cục bộ, chúng tôi đã sử dụng thiết bị đầu cuối nối tiếp Windows. Kết nối nối tiếp Side PC là 115200bps, 8N1. Cướp biển xe buýt phải đáp ứng bất kỳ loại thức ăn nào (0x0a, 0x0d) hoặc cả hai (kiểu Windows).

.I2C / SPI – Flash 24LC1025 EEPROM

Eeproms của Microchip là chip bộ nhớ lưu trữ vĩnh viễn phổ biến, 24LC1025 có 128Kbyte dung lượng lưu trữ với giao diện I2C. Chúng ta có thể kiểm tra chip này mà không có bánh mì lên một mạch lớn hoặc viết mã.

Hình ảnh cho thấy một chiếc 24LC1025 được kết nối với cướp biển xe buýt. EEPROM hoạt động từ 2,7 đến 5Volts, vì vậy chúng tôi đã sử dụng nguồn cung cấp 3.3Volt từ cướp biển xe buýt để cấp nguồn cho mạch. Các điện trở kéo lên SDA / SCL trên bo mạch giữ bus I2C cao và loại bỏ nhu cầu về điện trở bên ngoài. Một tụ điện 0,1uf duy nhất làm giảm EEPROM khỏi nguồn điện.

Thiết lập chế độ I2C.

Đầu tiên, chúng tôi thiết lập tên cướp biển cho chế độ I2C và kích hoạt các điện trở kéo lên. Xem xét rằng Pirate Bus hiện đang sử dụng thư viện phần mềm I2C, cài đặt tốc độ không thực sự có ảnh hưởng.

SPI> M <-Enter M cho chế độ Chọn 1. SPI. 2. I2C. 3. UART. 4. Dây sống 2 5. Dây sống 3 Chế độ> 2 <-Enter 2 cho I2C Bộ 900 chế độ Chỉnh tốc độ: 1. 100kHz (tiêu chuẩn) 2. 400kHz (chế độ nhanh) 3. 1 MHz (Tốc độ cao) Tốc độ> 1 <-speed không thực sự làm bất cứ điều gì ... Bộ tốc độ 901. 202 I2C sẵn sàng, P / P cho Pullups I2C> P <-Những điện trở kéo lên I2C 205 I2C Pullup trên I2C >.

Viết thư cho EEPROM (I2C)

Tất cả các thao tác I2C bắt đầu bằng một điều kiện bắt đầu {hoặc [và kết thúc bằng điều kiện dừng} hoặc]. Một ghi bắt đầu bằng cách giải quyết thiết bị (1 byte) và cố gắng tìm một bit xác nhận (ACK). Nếu EEPROM phản hồi, chúng ta có thể gửi vị trí dữ liệu để ghi (2 byte) và tải trọng dữ liệu (n byte). Cướp biển xe buýt tự động kiểm tra ACK ở cuối mỗi lần ghi và ack mỗi lần đọc.

Địa chỉ cơ sở 24LC1025 là 1010xxy, trong đó XX được phát hiện bởi trạng thái của PIN 2 và 3 và Y được đọc (1) hoặc ghi (0) chế độ. Chúng tôi trói ghim 2 và 3 cao, tạo ra địa chỉ viết đầy đủ 1010110. Chúng tôi sẽ bắt đầu ghi vào thiết bị ở vị trí dữ liệu đầu tiên (0 0) và viết một đến mười ba bằng cách sử dụng kết hợp các định dạng đầu vào dữ liệu (1 … 13) .

I2C> {0b10100110 0 0 1 2 3 4 5 6 7 8 9 10 0xb 0xc 13} <-I2c Command 210 I2C Điều kiện bắt đầu <-BUS Bắt đầu 220 I2C Viết: 0xA6 GOT ACK: Có <-Address đã gửi và ACK nhận được 220 I2C Viết: 0x00 GOT ACK: Có <-Write Địa chỉ 220 I2C Viết: 0x00 GOT ACK: Có <-Write Địa chỉ 220 I2C Viết: 0x01 GOT ACK: Có <-Data ... 220 I2C Viết: 0x0D GOT ​​ACK: Có Điều kiện dừng 240 I2C I2C >.

Đọc từ EEPROM (I2C)

Đọc 24LC1025 mất hai bước. Đầu tiên, một lệnh ghi mà không có dữ liệu nào đặt con trỏ địa chỉ. Thứ hai, một bản đọc comm

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *