Gia tốc kế BMA180. Làm thế nào để nó chia sẻ các chân giữa I2C và SPI?


11

Gia tốc kế BMA180 có thể là nô lệ SPI hoặc nô lệ I 2 C. Các chân cho cả hai xe buýt được chia sẻ.

SPI mode                    I2C mode
---------------------------------------------------
SDI  input                  SDA  bidirectional (!)
SDO  output                 ADDR address bit, input
SCLK input                  SCL  input
CSB  chip select, input     I2C  mode select, input

Theo biểu dữ liệu (xem chương 8) , việc lựa chọn giữa các xe buýt được thực hiện thông qua chân CSB. Khi CSB ở mức thấp, thiết bị là nô lệ SPI. Khi CSB ở mức cao, thiết bị là nô lệ I 2 C.

Đây là một chế độ thất bại , mà tôi quan tâm. Giả sử, BMA180 nằm trên bus SPI. Ngoài ra còn có một thiết bị khác trên cùng một xe buýt với lựa chọn chip riêng. Giả sử, chủ xe buýt SPI đang liên lạc với thiết bị khác đó. CSB cho BMA180 cao, vì vậy nên bật I 2 C. BMA180 nhìn thấy các cạnh đồng hồ trên SCL (SPI's SCLK) và các bit trên SDA (SPI's MOSI) bay qua. Điều gì sẽ xảy ra nếu một số bit này trông giống BMA180 giống như bắt đầu giao dịch đọc I 2 C hợp lệ và BMA180 bắt đầu xuất dữ liệu và chặn các giao dịch SPI hiện tại? Làm thế nào để thiết kế BMA180 ngăn chặn điều đó?

Đây là một vấn đề tò mò. Tôi chưa thử nghiệm những vấn đề này. Tôi sẽ sử dụng BMA180 trên SPI.

Bất kỳ đề nghị, cái nhìn sâu sắc hoặc tài liệu tham khảo là thực sự đánh giá cao!

Cập nhật. Tìm thấy một cái gì đó trong biểu dữ liệu (xem 7.7.11) . Nó khuyến nghị vô hiệu hóa I 2 C bằng cách cài đặt dis_i2cbit, nếu giao tiếp với BMA180 qua SPI.

Khi giao diện SPI được sử dụng, chúng tôi khuyên bạn nên đặt dis_i2c thành 1 để tránh sự cố.

BMA180 có EEPROM tích hợp. Nội dung đăng ký có thể được lưu trữ trong EEPROM và tự động được tải theo trình tự bật nguồn. Vì vậy, có thể làm cho BMA180 bỏ qua I 2 C hoàn toàn và luôn luôn.

Cập nhật. Con quay hồi chuyển L3GD20 là một IC khác, chia sẻ các chân giữa I 2 C và SPI theo cách tương tự. Dường như không có cài đặt bit để tắt chế độ I 2 C. Vì vậy, nó sẽ yêu cầu một cổng OR như ADXL345, mà @markrages đưa ra.

Đứng lên! Bosch đã ngừng vận chuyển BMA180 ( thư chính thức tại đây ).

Câu trả lời:


14

Tôi đã thấy chính xác hành vi mà bạn sợ trên ADXL345, sử dụng cùng sơ đồ lựa chọn I2C / SPI. Tôi đã có một thiết bị SPI khác sử dụng phân cực đồng hồ khác nhau và nó tình cờ mô phỏng mã bắt đầu I2C, ADXL345 đã cố gắng nói chuyện lần lượt là I2C. Tin xấu.

Tôi cẩn thận viết lại SPI dưới dạng bit bang thay vì sử dụng thiết bị ngoại vi, đảm bảo không thay đổi dòng MOSI trong khi đồng hồ ở mức cao. (Đây là điều kiện bắt đầu I2C.) Điều đó dường như để giải quyết mọi thứ.

Nếu tôi đã bắt đầu từ đầu, tôi sẽ thử sử dụng bus I2C thay thế hoặc cổng SPI chuyên dụng cho ADXL345.

Rõ ràng tôi không phải là người duy nhất gặp phải điều này. Đoạn này đã xuất hiện trong bản sửa đổi sau của biểu dữ liệu ADXL345:

nhập mô tả hình ảnh ở đây


+1 và cảm ơn! Chỉ tìm thấy trong biểu dữ liệu rằng BMA180 có bit vô hiệu hóa I2C (xem 7.7.11). Thật đáng tin khi BMA180 cũng có cổng OR tích hợp và nó không được đề cập rõ ràng trong biểu dữ liệu.
Nick Alexeev

1
Cổng OR vô hiệu hóa chế độ I2C một cách hiệu quả, do đó, nó không được tích hợp vào chip. (Nếu nhà thiết kế chip có thể dự phòng thêm pin, tình huống hoàn toàn có thể tránh được.)
markrages

Tôi không nên viết "quá" trong bài viết trước. Bởi "quá" có nghĩa là "ngoài bit vô hiệu hóa I2C". Tôi cũng đã sai rằng trong sơ đồ này, cổng OR có thể được tích hợp vĩnh viễn vào IC gia tốc. Điều đó sẽ vô hiệu hóa I2C mãi mãi. Tôi sẽ viết lại bình luận trước đó.
Nick Alexeev

BMA180 có 3x DNC / chân dành riêng. Có thể, chúng đã được sử dụng cho mục đích nhà máy.
Nick Alexeev

1
Tôi đã nhận thấy các gia tốc kế kỹ thuật số có xu hướng tương thích pin với nhau. Điều đó có thể giải thích các chân không sử dụng. Hoặc thử nghiệm nhà máy như bạn nói.
đánh dấu
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.