Làm cách nào để phát hiện loại bảng HAT hoặc GPIO nào được cắm - nếu có?


8

Tôi đang thiết lập một số Raspberry Pis để sử dụng trong các bản demo cho đồng nghiệp, để thể hiện khả năng của chính Pi và một số bảng bổ trợ có sẵn.

Tôi thực sự muốn có thể duy trì một tập lệnh khởi động / khởi động cho tất cả các bản demo có thể tôi đang thiết lập và để tập lệnh đó phát hiện ra bảng HAT hoặc bảng GPIO cũ hơn được cắm vào để tôi có thể kích hoạt kịch bản / chương trình demo phù hợp.

Ví dụ,

  • Nếu một SenseHAT được đính kèm, sau đó tự động khởi động Mê cung Đá cẩm thạch Sense HAT
  • Nếu HAT Display-O-Tron được đính kèm, sau đó tự động chạy ví dụ trình đơn
  • Nếu màn hình PiTFT được đính kèm, sau đó tự động khởi động trình chiếu ảnh

Có cách nào để chạy Python, sh hoặc tương tự, để phát hiện bảng nào trong số các bảng GPIO phổ biến được kết nối với Pi không?

Những điều tôi đã xem xét:

  • Sử dụng thông tin từ Pinout.xyz để phát hiện các chân đang sử dụng, nhưng điều đó nghe có vẻ như rất nhiều công việc.

Lưu ý rằng ý định của tôi là tự động phát hiện cấu hình, mà không cần gắn bàn phím, ssh vào hoặc tương tự - do đó mong muốn tự động phát hiện và tại sao một cái gì đó như đặt biến môi trường sẽ không giúp ích.


1
Tôi nghĩ điều này là có thể với mũ, vì chúng có chứa một eprom được sử dụng để thiết lập. Bạn có thể có thể xác định phần còn lại với một số kịch bản shell và xem những gì được báo cáo bởi dmesg, lsusb, v.v. Bạn cũng có thể muốn xem xét việc đặt biến môi trường mà bạn thay đổi khi trao đổi phần cứng.
Steve Robillard

@SteveRobillard, có phải tất cả các mũ đi kèm với một eprom? Họ không thể xếp chồng lên nhau? Nếu vậy làm thế nào là nhiều eprom được giải quyết riêng biệt?
Ghanima

@SteveRobillard Cảm ơn bạn đã gợi ý. Tôi đã làm rõ câu hỏi của mình để cố gắng nói tại sao cài đặt các biến môi trường (và bất kỳ tương tác bàn phím nào khác) sẽ không hoạt động. Tôi đã không nghe nói về dmesg và lsusb. Googling họ chỉ cho tôi biết Raspberry Pi của bạn trông cũng tốt.
Clare Macrae

@Ghanima Tôi sẽ rất vui khi giải quyết vấn đề này cho trường hợp một HAT, và không lo lắng về việc xếp chúng!
Clare Macrae

Câu trả lời:


5

Đã đọc qua những bình luận và câu trả lời trước đó rất hữu ích từ Steve Robillard và Ghanima :

/ Proc / thiết bị cây / mũ / sản phẩm

Nếu /proc/device-tree/hat/producttồn tại, bạn có HAT được đính kèm và tải - và tệp đó chứa tên của HAT.

Dưới đây là một số kết quả đầu ra mẫu:

Hiển thị-o-Tron HAT

cat /proc/device-tree/hat/product
Display-o-Tron HAT

Tên và nội dung của tất cả các tệp trong /proc/device-tree/hat/thiết bị này:

name: hat
product: Display-o-Tron HAT
product_id: 0x0007
product_ver: 0x0001
uuid: 666dfe9b-9d78-4825-bbfe-1697048fc6cd
vendor: Pimoroni Ltd.

Adaf nhung PiTFT Plus - 3,5 inch

cat /proc/device-tree/hat/product
Adafruit PiTFT Plus - 3.5 inch Resistive

Tên và nội dung của tất cả các tệp trong /proc/device-tree/hat/thiết bị này:

name: hat
product: Adafruit PiTFT Plus - 3.5 inch Resistive Touch
product_id: 0x0000
product_ver: 0x0000
uuid: 684cdc28-d27f-4065-9d11-bb3f3463786d
vendor: Adafruit Industries

Cập nhật: 2018-05-17

Một số thiết bị được bán trên thị trường dưới dạng HAT nhưng không có EEPROM với blob dữ liệu hợp lệ, trong trường hợp đó, không có cách nào để phát hiện loại "HAT", vì nó không khớp với thông số HAT.

Cập nhật: 2020-01-07

Tôi đã tạo một repo github với một tập lệnh để lấy dữ liệu cho các HAT mà tôi có quyền truy cập và để ghi lại những thứ không thực sự là HAT:

https://github.com/claremacrae/raspi_hat_data

Yêu cầu kéo được chào đón - chỉ cần chạy copy_hat_data.shtập lệnh trong repo đó.


1
Vui mừng điều này làm việc tốt cho bạn! Cảm ơn các nội dung thực tế của cây thiết bị. Nó chắc chắn giúp hiểu vấn đề tốt hơn.
Ghanima

Nó vẫn làm việc! Vấn đề bạn liên kết trên github chỉ là lỗi người dùng.
Paul Slocum

Cảm ơn @PaulSlocum - Tôi đã cập nhật điều này và làm cho repo về điều này trở nên rõ ràng hơn .... Nếu bạn dùng thử trên bất kỳ HAT nào tôi không có dữ liệu, tôi thực sự đánh giá cao việc bạn thêm nó ... Hãy tôi biết nếu bạn cần thêm thông tin ....
Clare Macrae

Tôi nhận được thông tin chính xác từ /sys/firmware/devicetree/base/hatnếu có một chiếc mũ được cắm vào RPi. Cái nào được khuyến nghị?
testuser

4

Trích xuất bình luận xuất sắc của SteveRobillards:

Sử dụng EEPROM I2C của HAT

Các Raspberry Pi Blog điểm cho đặc điểm kỹ thuật HAT để GitHub nơi cả hai tài liệu và các công cụ phần mềm ( eepromutils) cho các thao tác có sẵn.

README.md :

ID EEPROM chứa dữ liệu xác định bảng, cho B + biết GPIO cần được thiết lập như thế nào và phần cứng nào trên bảng. Điều này cho phép bảng bổ trợ được tự động xác định và thiết lập bởi phần mềm Pi khi khởi động, bao gồm tải tất cả các trình điều khiển cần thiết.

Thông tin của HAT được phản ánh trong cây thiết bị /proc/device-tree/hatcó thể được đọc từ không gian người dùng theo bất kỳ cách nào được đề cập (python, sh, ...).

Lưu ý rằng không có HAT xếp chồng * (trên mỗi Raspberry Pi Blog ):

Các HAT có thể xếp chồng đặc trưng trong cuộc thảo luận về đặc tả kỹ thuật - nhưng cuối cùng nó đã bị loại bỏ do sự gia tăng lớn về độ phức tạp của autoconfig và khả năng xảy ra lỗi người dùng.

Vì vậy, tại bất kỳ thời điểm nào, chỉ có một HAT sẽ được kết nối, đọc EEPROM của nó và cung cấp thông tin của nó tại cây thiết bị.


* Có thể tạo mũ có thể xếp chồng lên nhau nếu chúng cùng loại và do đó không yêu cầu nhận dạng nhiều và khác nhau, ví dụ: Bộ điều khiển PWM / Servo 16 kênh Adaf nhung cho Raspberry Pi .


@steverobillard, xin lỗi, không thể cưỡng lại.
Ghanima

3
Không có vấn đề gì miễn là người dùng nhận được câu trả lời - đó là tất cả vấn đề.
Steve Robillard

Cảm ơn bạn rất nhiều cả @SteveRobillard và Ghanima - điều này đã cho tôi một số gợi ý thực sự tốt.
Clare Macrae
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.