Logo Zephyrnet

Cái nhìn thực tế về PIO trên Raspberry Pi Pico

Ngày:

Raspberry Pi IoT
Minh họa: © IoT cho tất cả

Sản phẩm Quả mâm xôi Pi Pico Đã gây bão trong thế giới vi điều khiển khi nó được phát hành vào đầu năm 2021. Là MCU đầu tiên được phát triển và phát hành bởi Raspberry Pi Foundation, thế giới đã ngay lập tức chú ý đến (đặc biệt là khi xem xét sự thành công không thể phủ nhận của dòng máy tính bảng đơn Raspberry Pi).

Kéo lại tấm bìa trên Pico, chúng tôi nhanh chóng biết rằng đó không chỉ là một MCU khác. Đáng chú ý nhất là nó bao gồm hỗ trợ cho một tính năng gọi là I/O có thể lập trình (PIO).

Trước khi đi sâu vào PIO trên Raspberry Pi Pico, hãy cùng xem lùi lại một bước khổng lồ.

Raspberry Pi Pico là gì?

Hãy nhớ khi Apple gây ồn ào khi giới thiệu Táo Silicon? Theo những gì tôi cho là một động thái vui vẻ, Raspberry Pi Foundation đã phù hợp với Apple với việc phát hành con chip đầu tiên được phát triển nội bộ của riêng họ dưới chiêu bài “Raspberry Silicon”. Con chip đó là RP2040 và Pico là bộ công cụ phát triển chính thức cho RP2040 từ Raspberry Pi Foundation:

Raspberry Pi Pico 2040
Nguồn hình ảnh Quỹ Raspberry Pi.

Với mức giá bình dân là 4 USD, Pico là một bộ vi điều khiển tuyệt vời dành cho người mới bắt đầu cũng như các chuyên gia. Được biết đến và phân phối chính thức với tên gọi RP2040, Pico bao gồm các tính năng phần cứng và phần sụn như:

  • Bộ xử lý lõi kép Arm Cortex-M0+;
  • 264KB RAM trên chip;
  • Hỗ trợ tích hợp cho MicroPython;
  • Một loạt các tùy chọn I/O, bao gồm cả thứ được gọi là I/O có thể lập trình (PIO).

Chúng ta hãy xem xét kỹ hơn PIO là gì khi bạn có thể cân nhắc sử dụng nó và cuối cùng là bạn sẽ sử dụng nó như thế nào.

I/O có thể lập trình (PIO) là gì?

Tất cả MCU và SBC đều hỗ trợ các giao thức truyền thông như I2C và SPI. RP2040 cũng không khác, với 2 x bộ điều khiển UART, 2 x SPI và 2 x I2C. Điều này cho phép Pico giao tiếp với nhiều loại thiết bị ngoại vi tiêu chuẩn một cách dễ dàng.

Tuy nhiên, nhiều người trong chúng ta đã gặp phải tình huống trong đó chúng ta đang xây dựng một giải pháp xoay quanh công nghệ cũ hoặc thậm chí sử dụng nhiều thiết bị SPI với một MCU duy nhất. Đây là lúc bộ phận hỗ trợ PIO của RP2040 xuất hiện để trợ giúp.

Sử dụng PIO, bạn có thể tạo giao diện của mình từ đầu. Về lý thuyết, bạn thậm chí có thể xây dựng các giao diện hoàn toàn mới mà thậm chí chưa từng được tưởng tượng ra!

Ở cấp độ kỹ thuật cao hơn một chút, một phiên bản PIO có thể so sánh với một bộ xử lý nhỏ chạy mã riêng biệt với Cortex-M0+ chính. Vì vậy, những gì đã được thực hiện trước đây bằng các giao thức “bit-banging” (và tiêu tốn chu kỳ CPU), PIO thực hiện độc lập với CPU.

Đây là sơ đồ cho một khối PIO:

sơ đồ khối mâm xôi pi pico pio
Tín dụng hình ảnh Bảng dữ liệu RP2040.

Trên RP2040, mỗi phiên bản PIO bao gồm bốn máy trạng thái mỗi lệnh có thể chạy các lệnh được lưu trữ trong bộ nhớ lệnh dùng chung. Bộ nhớ này có thể chứa 32 lệnh và mỗi máy trạng thái có thể sử dụng bất kỳ lệnh nào đã nói. Mỗi máy trạng thái cũng có thể điều khiển bất kỳ chân GPIO nào trên Pico.

Lập trình một phiên bản PIO dễ dàng hơn bạn mong đợi. Vì nó dựa trên các hướng dẫn lắp ráp đặc biệt nên bạn có thể viết mã trong bất kỳ trình soạn thảo nào (ví dụ: thay vì IDE “Raspberry Pi Pico” độc quyền).

Nói về việc viết mã để lập trình một phiên bản PIO, ngôn ngữ PIO bao gồm chín và chỉ chín hướng dẫn:

  • trong()
  • ngoài()
  • đẩy()
  • sự lôi kéo()
  • mov()
  • irq()
  • đợi đã()
  • jmp()
  • bộ()

Thoạt nhìn, điều này có vẻ không nhiều nhưng chúng cung cấp rất nhiều tính năng.

Hãy chuyển sang một vấn đề thực tế hơn: khi nào tôi nên sử dụng PIO? Đó là một câu hỏi xác đáng, vì trong hầu hết các dự án của nhà sản xuất, sẽ có rất nhiều hỗ trợ tích hợp cho I2C, UART và SPI. Tuy nhiên, đôi khi PIO có thể là một lợi thế quan trọng.

Khi nào tôi nên sử dụng PIO?

Bạn đã bao giờ gặp phải trường hợp cần thêm kết nối UART có sẵn trên bo mạch chưa? Còn việc xuất trực tiếp ra video DVI thì sao? Hoặc có thể bạn đang cố gắng giao tiếp với một phần cứng cũ qua cổng nối tiếp mà không có bất kỳ thư viện hỗ trợ nào.

Đây đều là những kịch bản hợp lệ để tìm hiểu sâu hơn về PIO trên Mâm xôi Ptôi Pico.

Mặc dù không liên quan đến Raspberry Pi Pico, nhưng một dự án Hackster đã hoàn thành được những điều trên mà không cần sử dụng PIO (nhưng có thể tác giả mong muốn điều đó). Điều khiển từ xa robot Nintendo ROB qua mạng di động.

robot nintendo điều khiển từ xa
Tín dụng hình ảnh Zak Fields.

Làm cách nào để sử dụng PIO trên Pico?

Nếu bạn giống tôi, bạn có thể đọc các bài đăng trên blog cả ngày mà không học được gì nhiều. Và vâng, tôi nhận ra nhận xét này rất meta.

Tôi học tốt nhất bằng cách thực hành và tôi bắt đầu “làm” bằng cách sao chép và dán mã và xử lý từng dòng một.

Khi làm việc với Pico và MicroPython, tôi nhận thấy có vô số công dụng từ Kho lưu trữ ví dụ Pico MicroPython trên GitHub.

Trường hợp cụ thể, trong pio thư mục, chúng ta có thể tìm thấy một ví dụ PIO tương đối đơn giản:

  1. Liên kết một GPIO duy nhất với set() chỉ dẫn;
  2. Sử dụng độ trễ để nhấp nháy đèn LED;
  3. Khởi tạo máy trạng thái để chạy hướng dẫn và nhấp nháy đèn LED trên bo mạch.

Ví dụ đầy đủ có sẵn ở đây (được chỉnh sửa nhẹ để xóa nhận xét):

import time
import rp2
from machine import Pin @rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink(): wrap_target() set(pins, 1) [31] nop() [31] nop() [31] nop() [31] nop() [31] set(pins, 0) [31] nop() [31] nop() [31] nop() [31] nop() [31] wrap() sm = rp2.StateMachine(0, blink, freq=2000, set_base=Pin(25)) sm.active(1)
time.sleep(3)
sm.active(0)

Điều gì đang xảy ra trong mẫu mã này?

Chương trình PIO nằm trong blink() chức năng (và lưu ý @rp2.asm_pio người trang trí).

Sản phẩm wrap_target() và wrap() phương pháp tạo ra một vòng lặp. Các set() hàm chấp nhận mục tiêu (trong trường hợp này pins) Và 1 biểu thị việc đặt pin ở mức cao (và 0 thấp về sau).

Sản phẩm nop() mỗi chức năng tạo ra độ trễ nhân tạo khoảng 20 chu kỳ.

Vì vậy, chúng tôi đặt chân GPIO ở mức cao (sáng đèn LED), tạm dừng trong một số chu kỳ và sau đó đặt chân ở mức thấp (tắt đèn LED). Điều này gây ra hiện tượng chớp mắt nhanh mà mắt người có thể nhìn thấy:

pico pio đang hoạt động

Kết luận

PIO trên Raspberry Pi Pico có thể hữu ích khi bạn kết nối với các thiết bị ngoại vi không chuẩn. Điều đó không có nghĩa là nó dành cho tất cả mọi người, nhưng nếu bạn cần kết nối thông qua các giao thức liên lạc không xác định hoặc không có sẵn, bạn sẽ nhanh chóng yêu thích!

Hãy chắc chắn để kiểm tra các Bảng dữ liệu RP2040 để học sâu hơn và điều này Trình giả lập PIO để có các kịch bản gỡ lỗi và phát triển nâng cao hơn.

Chúc bạn hack vui vẻ với Raspberry Pi Pico!

PlatoAi. Web3 được mô phỏng lại. Khuếch đại dữ liệu thông minh.
Nhấn vào đây để truy cập.

Nguồn: https://www.iotforall.com/a-practical-look-at-pio-on-the-raspberry-pi-pico

tại chỗ_img

Tin tức mới nhất

tại chỗ_img