lớp SPI -- giao thức bus giao tiếp ngoại vi nối tiếp (phía điều khiển)¶
SPI là giao thức nối tiếp đồng bộ được điều khiển bởi một bộ điều khiển. Ở cấp độ vật lý, một bus bao gồm 3 đường: SCK, MOSI, MISO. Nhiều thiết bị có thể chia sẻ cùng một bus. Mỗi thiết bị nên có một tín hiệu riêng biệt thứ 4 là CS (Chip Select), để chọn một thiết bị cụ thể trên bus để giao tiếp. Việc quản lý tín hiệu CS nên được thực hiện trong mã người dùng (qua lớp machine.Pin).
Cả hai triển khai SPI phần cứng và phần mềm đều tồn tại thông qua các lớp SPI và SoftSPI. SPI phần cứng sử dụng hỗ trợ phần cứng cơ bản của hệ thống để thực hiện các thao tác đọc/ghi và thường hiệu quả và nhanh nhưng có thể có các hạn chế về chân nào có thể sử dụng. SPI phần mềm được triển khai bằng bit-banging và có thể được sử dụng trên bất kỳ chân nào nhưng không hiệu quả bằng. Các lớp này có các phương thức tương tự nhau và khác nhau chủ yếu ở cách chúng được tạo.
Ví dụ sử dụng:
from machine import SPI, Pin
spi = SPI(0, baudrate=400000) # Create SPI peripheral 0 at frequency of 400kHz.
# Depending on the use case, extra parameters may be required
# to select the bus characteristics and/or pins to use.
cs = Pin(4, mode=Pin.OUT, value=1) # Create chip-select on pin 4.
try:
cs(0) # Select peripheral.
spi.write(b"12345678") # Write 8 bytes, and don't care about received data.
finally:
cs(1) # Deselect peripheral.
try:
cs(0) # Select peripheral.
rxdata = spi.read(8, 0x42) # Read 8 bytes while writing 0x42 for each byte.
finally:
cs(1) # Deselect peripheral.
rxdata = bytearray(8)
try:
cs(0) # Select peripheral.
spi.readinto(rxdata, 0x42) # Read 8 bytes inplace while writing 0x42 for each byte.
finally:
cs(1) # Deselect peripheral.
txdata = b"12345678"
rxdata = bytearray(len(txdata))
try:
cs(0) # Select peripheral.
spi.write_readinto(txdata, rxdata) # Simultaneously write and read bytes.
finally:
cs(1) # Deselect peripheral.
Constructors¶
- class machine.SPI(id: int, baudrate: int = 1000000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None)¶
Tạo một đối tượng SPI trên bus được chỉ định, id. Các giá trị của id phụ thuộc vào cổng cụ thể và phần cứng của nó. Các giá trị 0, 1, v.v. thường được sử dụng để chọn khối SPI phần cứng #0, #1, v.v.
Khi không có tham số bổ sung, đối tượng SPI được tạo nhưng chưa được khởi tạo (nó có cài đặt từ lần khởi tạo cuối cùng của bus, nếu có). Nếu có thêm đối số, bus sẽ được khởi tạo. Xem
initđể biết các tham số khởi tạo.Methods¶
- init(baudrate: int = 1000000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = SPI.MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None) None¶
Khởi tạo bus SPI với các tham số đã cho:
baudratelà tốc độ xung nhịp SCK.polaritycó thể là 0 hoặc 1, và là mức mà đường xung nhịp ở trạng thái nhàn rỗi.phasecó thể là 0 hoặc 1 để lấy mẫu dữ liệu ở cạnh xung nhịp đầu tiên hoặc thứ hai tương ứng.bitslà độ rộng tính bằng bit của mỗi lần truyền. Chỉ 8 được đảm bảo hỗ trợ bởi tất cả phần cứng.firstbitcó thể làSPI.MSBhoặcSPI.LSB.sck,mosi,misolà các đối tượng chân (machine.Pin) để sử dụng cho các tín hiệu bus. Đối với hầu hết các khối SPI phần cứng (được chọn bởi tham sốidcủa constructor), các chân được cố định và không thể thay đổi. Trong một số trường hợp, các khối phần cứng cho phép 2-3 bộ chân thay thế cho một khối SPI phần cứng. Gán chân tùy ý chỉ có thể với trình điều khiển SPI bitbanging (id= -1).
Trong trường hợp SPI phần cứng, tần số xung nhịp thực tế có thể thấp hơn tốc độ baud được yêu cầu. Điều này phụ thuộc vào phần cứng của nền tảng. Tốc độ thực tế có thể được xác định bằng cách in đối tượng SPI.
- read(nbytes: int, write: int = 0x00) bytes¶
Đọc một số byte được chỉ định bởi
nbytestrong khi liên tục ghi byte đơn được chỉ định bởiwrite. Trả về đối tượngbytesvới dữ liệu đã đọc.
Constants¶
lớp SoftSPI -- bus SPI mô phỏng bằng phần mềm¶
Lớp SoftSPI triển khai SPI bằng cách bit-banging các chân GPIO tùy ý. Nó hiển thị cùng bề mặt phương thức như SPI để mã hiện tại nhắm mục tiêu SPI phần cứng có thể chuyển sang phần mềm chỉ với một thay đổi constructor. Sử dụng nó khi các chân bạn cần không được nối dây tới một khối SPI phần cứng, khi bạn cần nhiều hơn số lượng bus phần cứng có sẵn, hoặc khi một ngoại vi yêu cầu pha xung nhịp không tiêu chuẩn mà phần cứng không thể tạo ra.
Constructors¶
- class machine.SoftSPI(baudrate: int = 500000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None)¶
Tạo một đối tượng SPI phần mềm.
sck,mosivàmisophải được cung cấp -- không có lựa chọn chân ngầm định. XemSPI.init()để biết ý nghĩa của các tham số khác. Giá trị mặc địnhbaudratethấp hơn so vớiSPIphần cứng vì vòng lặp bit-bang có nhiều chi phí overhead hơn.Methods¶
- init(baudrate: int = 500000, *, polarity: int = 0, phase: int = 0, bits: int = 8, firstbit: int = SoftSPI.MSB, sck: Pin | None = None, mosi: Pin | None = None, miso: Pin | None = None) None¶
Khởi tạo lại bus SPI phần mềm với các tham số đã cho. Chỉ các đối số được cung cấp mới được cập nhật; các đối số khác giữ nguyên giá trị trước đó. Xem
SPI.init()để biết ý nghĩa của từng đối số.
- deinit() None¶
Giải phóng các chân GPIO được yêu cầu bởi trình điều khiển bit-bang và ngừng điều khiển bus.
- read(nbytes: int, write: int = 0x00) bytes¶
Đọc
nbytesbyte trong khi liên tục ghi byte đơnwrite. Trả về đối tượngbyteschứa dữ liệu nhận được.
Constants¶