MicroPython:Библиотеки/pyb/Класс SPI: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[]</ref>= <syntaxhighlight lang="python"...»)
 
Нет описания правки
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[]</ref>=
=Класс SPI – протокол последовательной коммуникации SPI, управляемый через ведущее устройство (мастера)<ref>[http://docs.micropython.org/en/latest/library/pyb.SPI.html docs.micropython.org - class SPI – a master-driven serial protocol]</ref>=
 
[[SPI]] – это протокол последовательной передачи данных, управляемый ведущим устройством (мастером). На физическом уровне [[SPI]] состоит из ''3 линий'': [[SCK]], [[MOSI]] и [[MISO]].
 
Модель использования шины [[SPI]] похожа на [[I2C]]. Главное различие – в аргументах при инициализации.
 
<syntaxhighlight lang="python" enclose="div">
from pyb import SPI
spi = SPI(1, SPI.MASTER, baudrate=600000, polarity=1, phase=0, crc=0x7)
</syntaxhighlight>
 
Единственный обязательный параметр – это mode: SPI.MASTER или SPI.SLAVE. В аргументе для полярности (''polarity'') можно задать ''«0»'' или ''«1»'' – это то, на каком логическом уровне начинается сигнал синхронизации. В аргументе для фазы (''phase'') тоже можно задать ''«0»'' или ''«1»'' – здесь определяется, по какому фронту сигнала синхронизации будет выполняться выборка: по переднему или заднему. В аргументе ''crc'' можно задать ''None'' (чтобы выключить [[CRC]]) или полином.
 
Дополнительные методы для класса [[SPI]]:
 
<syntaxhighlight lang="python" enclose="div">
data = spi.send_recv(b'1234') # отправляем 4 байта и получаем 4 байта
buf = bytearray(4)
spi.send_recv(b'1234', buf)  # отправляем 4 байта
                              # и получаем 4 байта в буфер
spi.send_recv(buf, buf)      # отправляем/получаем 4 байта из/в буфер
 
</syntaxhighlight>
 
==Конструкторы==
 
* [[MicroPython:Библиотеки/pyb/Класс SPI/pyb.SPI()|pyb.SPI(bus, ...)]]
 
• Класс pyb.SPI(bus, ...) – конструирует объект SPI на заданной шине. В аргументе bus может быть «1» или «2» (‘X’или ‘Y’). Если не задавать дополнительных аргументов, объект SPI будет создан, но не инициализирован (будут использованы настройки с прошлой инициализации, если они есть). Если задать дополнительные аргументы, шина будет инициализирована. Аргументы для инициализации см. в описании метода init().
Физические контакты SPI-шин на PyBoard:
o SPI(1) – на позиции X: (NSS, SCK, MISO, MOSI) = (X5, X6, X7, X8) = (PA4, PA5, PA6, PA7).
o SPI(2) – на позиции Y: (NSS, SCK, MISO, MOSI) = (Y5, Y6, Y7, Y8) = (PB12, PB13, PB14, PB15).
На данный момент контакт NSS не используется SPI-драйвером, поэтому его можно свободно использовать для других целей.
 
==Методы==
 
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.deinit()|SPI.deinit()]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.init()|SPI.init(mode, baudrate=328125, *, prescaler, polarity=1, phase=0, bits=8, firstbit=SPI.MSB, ti=False, crc=None)]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.recv()|SPI.recv(recv, *, timeout=5000)]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.send()|SPI.send(send, *, timeout=5000)]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.send()|SPI.send(send, *, timeout=5000)]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.send_recv()|SPI.send_recv(send, recv=None, *, timeout=5000)]]
 
 
• SPI.deinit() – выключает шину SPI.
• SPI.init(mode, baudrate=328125, *, prescaler, polarity=1, phase=0, bits=8, firstbit=SPI.MSB, ti=False, crc=None) – инициализирует шину SPI при помощи заданных параметров:
o mode – здесь должно быть SPI.MASTER или SPI.SLAVE.
o baudrate – тактовая частота SCK (этот аргумент используется только ведущим устройством).
o prescaler – это предварительный делитель частоты, используемый для расчета SCK из частоты шины APB. Использование prescaler заменяет baudrate.
o polarity – здесь может быть «0» или «1». Это логический уровень, на котором начинается сигнал синхронизации.
o phase – здесь может быть «0» или «1». Здесь задается, по какому фронту (переднему или заднему) сигнала синхронизации будет выполняться выборка.
o bits – pздесь может быть «8» или «16». Это количество бит в каждом передаваемом слове.
o firstbit – здесь может быть SPI.MSB или SPI.LSB.
o ti – здесь задается то, какие условные обозначения будут использоваться. Если задать True, это будут условные обозначения Texas Instruments, а если False, то Motorola.
o crc – здесь задается полином или None (чтобы выключить CRC).
Обратите внимание, что тактовая частота шины SPI – это не всегда частота, заданная в аргументе baudrate. PyBoard поддерживает только те значения baudrate, которые рассчитываются как частота шины APB (см. функцию pyb.freq()), поделенная на значение в аргументе prescaler (в нем может быть 2, 4, 8, 16, 32, 64, 128 или 256). SPI1 – это AHB2, а SPI2 – это AHB1. Поэтому, чтобы более точно задать тактовую частоту SPI-шины, используйте prescaler вместо baudrate.
Печать объекта SPI покажет рассчитанную тактовую частоту и выбранный делитель.
• SPI.recv(recv, *, timeout=5000) – принимает данные на шину.
o recv – здесь может быть целое число, обозначающее количество байтов, которое надо получить, или изменяемый буфер, который будет наполнен присланными байтами.
o timeout – таймаут в миллисекундах для ожидания получения данных.
Возвращаемое значение: Если в recv задано целое число, метод вернет новый буфер, наполненный присланными байтами, а если буфер, то метод вернет буфер, который был задан в recv.
• SPI.send(send, *, timeout=5000) – отправляет данные на шину.
o send – данные, которые надо отправить (целое число или буферный объект).
o timeout – таймаут в миллисекундах для ожидания отправки данных.
Возвращаемое значение: None.
• SPI.send_recv(send, recv=None, *, timeout=5000) – одновременно отправляет и получает данные на шину:
o send – данные, которые надо отправить (целое число или буферный объект).
o recv – изменяемый буфер, который будет наполнен присланными байтами. Это может быть тот же буфер, что и в send, или его можно не указывать вовсе. Если не указать этот аргумент, будет создан новый буфер.
o timeout – таймаут в миллисекундах для ожидания приема данных.
Возвращаемое значение: буфер с присланными данными.
 
==Константы==
 
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.MASTER|SPI.MASTER]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.SLAVE|SPI.SLAVE]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.LSB|SPI.LSB]]
* [[MicroPython:Библиотеки/pyb/Класс SPI/SPI.MSB|SPI.MSB]]
 
• SPI.MASTER, SPI.SLAVE – для инициализации SPI-шины в режиме ведущего или ведомого устройства.
• SPI.LSB, SPI.MSB – задает то, каким будет первый бит: самым старшим или самым младшим.





Версия от 12:06, 14 октября 2020

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс SPI – протокол последовательной коммуникации SPI, управляемый через ведущее устройство (мастера)[1]

SPI – это протокол последовательной передачи данных, управляемый ведущим устройством (мастером). На физическом уровне SPI состоит из 3 линий: SCK, MOSI и MISO.

Модель использования шины SPI похожа на I2C. Главное различие – в аргументах при инициализации.

from pyb import SPI
spi = SPI(1, SPI.MASTER, baudrate=600000, polarity=1, phase=0, crc=0x7)

Единственный обязательный параметр – это mode: SPI.MASTER или SPI.SLAVE. В аргументе для полярности (polarity) можно задать «0» или «1» – это то, на каком логическом уровне начинается сигнал синхронизации. В аргументе для фазы (phase) тоже можно задать «0» или «1» – здесь определяется, по какому фронту сигнала синхронизации будет выполняться выборка: по переднему или заднему. В аргументе crc можно задать None (чтобы выключить CRC) или полином.

Дополнительные методы для класса SPI:

data = spi.send_recv(b'1234') # отправляем 4 байта и получаем 4 байта 
buf = bytearray(4)
spi.send_recv(b'1234', buf)   # отправляем 4 байта
                              # и получаем 4 байта в буфер
spi.send_recv(buf, buf)       # отправляем/получаем 4 байта из/в буфер

Конструкторы

• Класс pyb.SPI(bus, ...) – конструирует объект SPI на заданной шине. В аргументе bus может быть «1» или «2» (‘X’или ‘Y’). Если не задавать дополнительных аргументов, объект SPI будет создан, но не инициализирован (будут использованы настройки с прошлой инициализации, если они есть). Если задать дополнительные аргументы, шина будет инициализирована. Аргументы для инициализации см. в описании метода init(). Физические контакты SPI-шин на PyBoard: o SPI(1) – на позиции X: (NSS, SCK, MISO, MOSI) = (X5, X6, X7, X8) = (PA4, PA5, PA6, PA7). o SPI(2) – на позиции Y: (NSS, SCK, MISO, MOSI) = (Y5, Y6, Y7, Y8) = (PB12, PB13, PB14, PB15). На данный момент контакт NSS не используется SPI-драйвером, поэтому его можно свободно использовать для других целей.

Методы


• SPI.deinit() – выключает шину SPI. • SPI.init(mode, baudrate=328125, *, prescaler, polarity=1, phase=0, bits=8, firstbit=SPI.MSB, ti=False, crc=None) – инициализирует шину SPI при помощи заданных параметров: o mode – здесь должно быть SPI.MASTER или SPI.SLAVE. o baudrate – тактовая частота SCK (этот аргумент используется только ведущим устройством). o prescaler – это предварительный делитель частоты, используемый для расчета SCK из частоты шины APB. Использование prescaler заменяет baudrate. o polarity – здесь может быть «0» или «1». Это логический уровень, на котором начинается сигнал синхронизации. o phase – здесь может быть «0» или «1». Здесь задается, по какому фронту (переднему или заднему) сигнала синхронизации будет выполняться выборка. o bits – pздесь может быть «8» или «16». Это количество бит в каждом передаваемом слове. o firstbit – здесь может быть SPI.MSB или SPI.LSB. o ti – здесь задается то, какие условные обозначения будут использоваться. Если задать True, это будут условные обозначения Texas Instruments, а если False, то Motorola. o crc – здесь задается полином или None (чтобы выключить CRC). Обратите внимание, что тактовая частота шины SPI – это не всегда частота, заданная в аргументе baudrate. PyBoard поддерживает только те значения baudrate, которые рассчитываются как частота шины APB (см. функцию pyb.freq()), поделенная на значение в аргументе prescaler (в нем может быть 2, 4, 8, 16, 32, 64, 128 или 256). SPI1 – это AHB2, а SPI2 – это AHB1. Поэтому, чтобы более точно задать тактовую частоту SPI-шины, используйте prescaler вместо baudrate. Печать объекта SPI покажет рассчитанную тактовую частоту и выбранный делитель. • SPI.recv(recv, *, timeout=5000) – принимает данные на шину. o recv – здесь может быть целое число, обозначающее количество байтов, которое надо получить, или изменяемый буфер, который будет наполнен присланными байтами. o timeout – таймаут в миллисекундах для ожидания получения данных. Возвращаемое значение: Если в recv задано целое число, метод вернет новый буфер, наполненный присланными байтами, а если буфер, то метод вернет буфер, который был задан в recv. • SPI.send(send, *, timeout=5000) – отправляет данные на шину. o send – данные, которые надо отправить (целое число или буферный объект). o timeout – таймаут в миллисекундах для ожидания отправки данных. Возвращаемое значение: None. • SPI.send_recv(send, recv=None, *, timeout=5000) – одновременно отправляет и получает данные на шину: o send – данные, которые надо отправить (целое число или буферный объект). o recv – изменяемый буфер, который будет наполнен присланными байтами. Это может быть тот же буфер, что и в send, или его можно не указывать вовсе. Если не указать этот аргумент, будет создан новый буфер. o timeout – таймаут в миллисекундах для ожидания приема данных. Возвращаемое значение: буфер с присланными данными.

Константы

• SPI.MASTER, SPI.SLAVE – для инициализации SPI-шины в режиме ведущего или ведомого устройства. • SPI.LSB, SPI.MSB – задает то, каким будет первый бит: самым старшим или самым младшим.


<syntaxhighlight lang="python" enclose="div">

См.также

Внешние ссылки