Làm cách nào để thiết kế và gỡ lỗi hệ thống chủ nô I2C tùy chỉnh?


10

Làm thế nào để tiến hành, khi cần một hệ thống chủ nô I2C tùy chỉnh?

Các tiêu chí thiết kế để áp dụng là gì?

Các công cụ sửa lỗi người ta có thể sử dụng để khắc phục sự cố là gì?


Đây là một câu hỏi tham khảo. Tôi đã xóa một vài bình luận làm cho điều này ít rõ ràng hơn. (Câu hỏi được trả lời bởi người hỏi).
Nick Gammon

Câu trả lời:


10

Hướng dẫn này tôi đã đưa ra tại Hội nghị Linux nhúng cố gắng trả lời các câu hỏi, cung cấp liên kết đến mô tả chi tiết hơn về các chủ đề được đề cập và sử dụng ví dụ thực tế về lái máy bay không người lái 4WD, trong đó Arduino Mini Pro đóng vai trò nô lệ và điều khiển 4 bánh xe độc ​​lập . Các tài liệu gốc có thể được tìm thấy ở đây .

Lưu ý: Câu trả lời này hiện đang được tiến hành, vì tôi điều chỉnh các điểm nổi bật từ liên kết.


Các ứng dụng điển hình của bus I2C

  • Giao diện với các thiết bị ngoại vi tương đối chậm. Vd: cảm biến, cơ cấu chấp hành.
  • Kiểm soát các thiết bị ngoại vi nhanh chóng, sử dụng các kênh khác để trao đổi dữ liệu. Vd: tiền mã hóa.

    Trong PC, Hệ điều hành thường tương tác qua I2C với:

    • máy đo nhiệt độ và điện áp pin;
    • điều khiển tốc độ quạt;
    • codec âm thanh.

Trong trường hợp có nhiều bộ điều khiển xe buýt, các thiết bị ngoại vi được nhóm theo tốc độ, để các bộ điều khiển nhanh không bị phạt bởi những bộ điều khiển chậm hơn.


Giới thiệu nhanh về xe buýt I2C - các tính năng chính

  • Xe buýt nối tiếp.
  • Chỉ có 2 dòng: Nối tiếp CLock và Nối tiếp DAta (cộng với mặt đất).
  • 4 tốc độ: 100kHz, 400kHz, 1 MHz, 3.2 MHz.
  • Thông thường, 1 thiết bị chính và 1 hoặc nhiều nô lệ.
  • Truyền thông luôn được bắt đầu bởi một thiết bị chính.
  • Nhiều chủ có thể cùng tồn tại trên cùng một xe buýt (đa chủ).
  • Open-Drain: cả SDA và SCL đều cần điện trở kéo lên.
  • Đồng hồ kéo dài
    • Bậc thầy điều khiển SCL, nhưng một nô lệ có thể giữ nó xuống (vì cống mở), nếu cần điều chỉnh tốc độ.
    • Các chủ phải kiểm tra cho kịch bản này.
    • Một nô lệ có thể bị kẹt và kẹt xe buýt: cần thiết lập lại các dòng từ chủ đến nô lệ.
  • Thông thường địa chỉ 7 bit, nhưng cũng được hỗ trợ 10 bit.
  • Giao thức logic: mức điện áp thực tế không được chỉ định và phụ thuộc vào việc thực hiện riêng lẻ. Vd: 1.8V / 3.3V / 5.0V

URL tham chiếu:

Ví dụ về cấu hình xe buýt

Ví dụ về cấu hình xe buýt


Đặc điểm của Giao thức (đơn giản hóa)

  • 2 loại tin nhắn: đọcviết
  • Bit bắt đầu / dừng - được biểu thị dưới dạng [[và và]] trong phần còn lại của câu trả lời
  • Địa chỉ: 7 hoặc 10 bit
  • Bit R / W: R = 1 / W = 0 Được sử dụng để phân biệt loại tin nhắn được gửi.
  • Dữ liệu trên xe buýt: (Địa chỉ << 1 | R / W)
  • Đăng ký làm trình xử lý thông tin, trong thiết bị đã chọn.

Ví dụ về lưu lượng xe buýt

Ví dụ về lưu lượng xe buýt Ví dụ về chu trình ghi xe buýt Ví dụ về chu trình đọc xe buýt Phần1 Ví dụ về chu trình đọc xe buýt Phần 2


Nô lệ tùy chỉnh

Tại sao tạo một nô lệ I2C tùy chỉnh?

  • Cảm biến / bộ truyền động mong muốn không có sẵn với giao diện I2C.
  • Địa chỉ ít độc đáo hơn so với nô lệ cần thiết.
  • Chức năng tùy chỉnh mong muốn trên nô lệ:
    • Phản ứng bán tự trị đối với kích thích.
    • Lọc / tiền xử lý dữ liệu đầu vào.
  • Tối ưu hóa năng lượng: bộ cảm biến tùy chỉnh trung tâm trung tâm cảm ứng làm công việc vệ sinh trong khi bộ xử lý chính không hoạt động.
  • Phản ứng thời gian thực với đầu vào.
  • [trí tưởng tượng của bạn ở đây]

Làm thế nào để thiết kế một nô lệ I2C tùy chỉnh?

  • Xác định các yêu cầu (xem slide trước).
  • Chọn vi điều khiển hoặc vi xử lý.
  • Chọn Trình lập lịch biểu hoặc Hệ điều hành (nếu có).
  • Xác định giao thức con truyền thông:
    • Xác định các tham số và lệnh sẽ được trao đổi.
    • Sắp xếp chúng vào các sổ đăng ký của người khác và chọn một địa chỉ miễn phí.

Thiết kế của I2C Master

Tiêu chí thiết kế chính:

  • Trọng lượng / Kích thước.
  • Yêu cầu sức mạnh tính toán và độ trễ trung bình.
  • Thiết bị giống PC
    • Thiết bị nhúng, thường không đầu.
    • Ngôn ngữ lập trình ưa thích: diễn giải so với biên dịch.
  • Tính khả dụng của các bus / gpios để lái (các) nô lệ:
    • Chỉ GPIO: bitbang giao thức
    • I2C: ứng dụng không gian người dùng so với trình điều khiển kernel.
    • Không có giao diện GPIO / I2C khả dụng: Bộ chuyển đổi USB sang I2C.

Gỡ lỗi: Phân chia và chinh phục

Kiểm soát trực tiếp xe buýt với một thiết bị đặc biệt. Ví dụ:

  • Bus Pirate (cũng hữu ích cho các bus khác)
  • Bộ chuyển đổi USB sang I2C Master, cũng dựa trên chip FTDI FT 232R.
  • Thiết bị tùy chỉnh (có thể là một dự án riêng biệt).
  • Rình mò xe buýt với một bộ phân tích logic hoặc một phạm vi / đồng hồ nâng cao. Ví dụ:

    • sigrok / Pulseview với bộ phân tích logic tương thích
    • Phạm vi độc lập 2 kênh / mét
    • Sử dụng trình gỡ lỗi dành riêng cho nô lệ / Trình mô phỏng mạch.

      Ví dụ: Dragon Dragon cho chip AVR (Arduino UNO, Nano, Mini, MiniPro)


Cướp biển xe buýt

Cướp biển xe buýt

  • Chủ yếu cho mục đích phát triển.
  • Cả hai có thể đánh hơi xe buýt và lái nó.
  • Giao diện bảng điều khiển qua cổng nối tiếp (ttyACM), bao gồm cả macro hoặc truy cập theo chương trình cho một số ngôn ngữ lập trình.
  • Tích hợp điện trở pullup và nguồn điện áp (5V / 3.3V)
  • Hỗ trợ nhiều giao thức khác.
  • Tài liệu tham khảo: Wikipedia , trang chính

Bộ chuyển đổi USB sang I2C

usbtoi2c

  • Dấu chân nhỏ.
  • Thích hợp cho việc cài đặt vĩnh viễn.
  • Không cần kết nối đặc biệt trên máy chủ: nó có thể được sử dụng để giao tiếp với một PC thông thường.
  • Biến thể có sẵn cũng có khả năng SPI.
  • Không có giao diện điều khiển, chỉ có giao thức nhị phân nối tiếp.
  • Yêu cầu trình bao bọc giao thức .
  • Tham khảo: giao thức

sigrok và Pulseview

logo sigrok (thành phần bakend)

sigrok

ví dụ Pulseview (visualizer)

xung

Ví dụ về phân tích logic cấp thấp

saleae

  • Tiêu chuẩn thực tế cho các phép đo do PC điều khiển trên linux (nhưng cũng có sẵn trên các HĐH khác).
  • Hỗ trợ cho nhiều loại máy phân tích logic, phạm vi và mét.
  • Bộ giải mã giao thức khác nhau, bao gồm I2C.
  • Hữu ích cho việc hiển thị các tín hiệu logic và gỡ lỗi lỗi giao thức.
  • Ngay cả đầu cuối rất thấp, CTNH rẻ tiền có thể cung cấp một khía cạnh hoàn toàn mới để gỡ lỗi.
  • Tài liệu tham khảo: sigrok , Pulseview , phần cứng được hỗ trợ

Ví dụ: điều khiển máy bay không người lái 4WD

Nguyên mẫu được xây dựng bằng 2 Arduino Mini Pro. Máy bay không người lái


Các nô lệ làm gì trong ví dụ?

Các nô lệ I2C:

  • Kiểm soát lượng mô-men xoắn áp dụng cho mỗi bánh xe.
  • Điều khiển hướng mỗi bánh xe quay.
  • Đo tốc độ quay của mỗi bánh xe thông qua bộ mã hóa quang học (Odometer).
  • Đưa ra các tham số ở trên cho I2C Master.

Vai trò nô lệ

Sơ đồ khối cấp cao của I2C Slave.


Chọn Slave: Arduino Mini Pro

MiniPro

  • Đủ các chân / chức năng để cung cấp cho mỗi bánh xe:
    • 1 đầu ra PWM với cấu hình độc lập của chu kỳ nhiệm vụ.
    • 1 GPIO để đăng ký đầu vào đo đường là IRQ.
    • 2 GPIO để chọn:
      • Ở đằng trước
      • Đảo ngược
      • Nhàn rỗi
      • Khóa
  • Khối I2C HW để trao đổi i2c điều khiển ngắt.
  • Chân chuyên dụng cho lập trình dựa trên SPI.
  • Dấu chân nhỏ.
  • Giá thấp.
  • Bố cục bảng của bản sao được thể hiện trong hình được tối ưu hóa để gắn trên ổ cắm DIL.

ICD đặc thù nô lệ: AVR Dragon

Rồng rồng


Chọn hệ điều hành: ChibiOS

Chibi

  • RTOS: sự ưu tiên, nhiệm vụ, semaphores, tic hệ thống động, v.v.
  • Dấu chân nhỏ: liên kết chỉ sử dụng mã / dữ liệu.
  • Phân biệt giữa RTOS và BSP thông qua HAL.
  • GPLv3 cho sử dụng phi thương mại.
  • Tích cực phát triển, nhưng đã trưởng thành.
  • Hỗ trợ 8bit AVR.

Tuy nhiên, nó đã hỗ trợ giới hạn BSP cho AVR, thiếu: - ngắt trình điều khiển cho các GPIO AVR (đã thêm). - Hỗ trợ I2C cho chế độ nô lệ AVR (tùy chỉnh). Mà phải được phát triển riêng như một phần của Drone SW cho AVR .


Xác định các thông số truyền thông

Đối với mỗi bánh xe:

  • Nhiệm vụ của tín hiệu PWM được sử dụng để điều khiển nó - 1 byte. 0xFF = mô-men xoắn tối đa / 0x00 = không có mô-men xoắn.

  • Hướng quay - 1 byte.

    • 0x00 = nhàn rỗi
    • 0x01 = đảo ngược
    • 0x02 = chuyển tiếp
    • 0x03 = bị khóa
  • Khoảng thời gian trung bình ở giữa các khe của bộ mã hóa quang - 2 byte.

    • Viết bất cứ điều gì đặt lại các phép đo.
  • Chỉ số tham số - 1 nibble:

    • 0 = Chu kỳ nhiệm vụ
    • 1 = Hướng
    • 2 = Thời gian trung bình
  • Chỉ số bánh xe - 1 nibble:

    • 0 = Phía sau bên trái
    • 1 = Phía sau bên phải
    • 2 = Mặt phải
    • 3 = Mặt trận bên trái
    • 4 = Tất cả

Giao thức con: Xác định các thanh ghi

Định dạng đăng ký: 0xαβ - α = Chỉ số tham số - = Chỉ số bánh xe

Địa chỉ (được chọn tùy ý): 0x10

Định dạng Bus Pirate: - [= bit bắt đầu -] = bit kết thúc - r = đọc byte - địa chỉ lần 2 (dịch chuyển trái 1), cho bit R / W


Ví dụ - ở định dạng Bus Pirate

[i2c_addr reg_addr = (parm, bánh xe) reg_value]

[0x20 0x20 0x02]  Left Rear Forward
[0x20 0x21 0x01]  Right Rear Backward
[0x20 0x22 0x01]  Right Front Backward
[0x20 0x23 0x02]  Left Front Forward
[0x20 0x14 0xFF]  Wheels set to max torque

Chiếc xe quay theo chiều kim đồng hồ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.