Современные микроконтроллеры часто взаимодействуют с периферийными устройствами через SPI‑шину. Проверить корректность работы SPI, отправить произвольные байты и посмотреть ответ бывает не так просто без специального оборудования. В этой статье мы разберём проект SPI DevTool — инструмент, который превращает STM32 в удобный веб‑интерфейс для отладки SPI.

Раз за разом начиная, разбирая, или вспоминая разные аппаратные решения, приходится сталкиваться с необходимостью (а то и просто - желанием) "пощупать" SPI-устройство, чтобы понять, как оно работает.

Обыкновенно, для таких задач приходится использовать либо подручную ардуино-подобную конструкцию, либо вовсе писать отдельный драфт, чтобы он выступал мастером для устройства.

В какой-то момент меня это достало, и, по старой доброй традиции "у нас есть N стандартов, ни один из которых...", я решил запилить себе удобный инструмент.

Многого для описания в этом проекте нет, думаю, пару картинок и скрин будет достаточно для тех, кому он интересен, и даже 2 тома описания не помогут тем, кому нет, поэтому дальше буду краток.

Аппаратная база

Черная таблетка для черной магии. Картинка заимствована с AliExpress.
Черная таблетка для черной магии. Картинка заимствована с AliExpress.

В качестве основы - недорогая отладочная плата "Черная пилюлька" с Али. Цепляется по TypeC, программируется тем же китайским J-Link-ом

Прошивка

За основу взят проект IP over USB с гитхаба. Спасибо авторам за собранный стек в DHCP, DNS, HTTP-сервером и примерной страничкой. Так, к компу это цепляется в виде виртуального Ethernet:

enx0080e1000000: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.0.2  netmask 255.255.255.0  broadcast 10.10.0.255
        inet6 fe80::191a:ddb5:ce97:364b  prefixlen 64  scopeid 0x20<link>
        

Я проинициализировал SPI HAL, GPIO, и создал процесс, в который отправляются данные после получения с веб-страницы POST-запроса. Этот процесс, собственно, и запускает SPI обмен в режиме Receive/Transmit. Как известно, в случае с классическим SPI, его подрежимы выглядят, как Receive/Transmit, в котором данные либо Receive либо Transmit игнорируются. Таким образом не счел нужным разделять эти потоки.

В случае необходимости принять данные нужной длины (для чего SPI должен натактировать нужное число байт), просто отправляем это количество нулей, и смотрим в ответ. Соответственно, для передачи данных их просто вводим, и на ответ не смотрим. Все просто.

Распиновка

Далее подключается подопытный девайс с помощью следующей таблички:

Сигнал

Порт

SPI_MOSI

PA7

SPI_MISO

PA6

SPI_SCK

PA5

SPI_NSS

PA4

И любым браузером заходим по адресу http://spi.go/. (ну, или 10.10.0.1, если система по каким-то причинам отказалась воспринимать локальный DNS). Открывается такой вот интерфейс:

Интерфейс
Интерфейс

На этом, пожалуй, все.

Внимательно следите, чтобы не перепутать, на какую кнопку нажать, когда введете данные (кнопка одна, легко ошибиться).

В данных допускаются пробелы и, вроде, вообще нелегитимные символы, которые просто игнорируются.

Формат данных - только HEX, не счел нужным делать ничего большего.

Исходные коды проекта - тут.

Проект, на основе которого это создано, как я уже упомянул - тут. В нем подмодули, которые я перетащил себе, но в оригинальном проекте все можно найти на гитхабе.

Репродукция проекта в несколько простых шагов

(ссылки дублирую)

  1. Заказать "Черную пилюльку".

  2. Проверить наличие J-Link

  3. Скачать STM32CubeIDE.

  4. Скачать проект, открыть его в STM32CubeIDE, собрать, подключить J-Link, прошить

  5. Подключить к компу, перейти на http://spi.go/

Комментарии (0)