Files
templates/tools/dsview/PLATES_BUSES.md
T
Andrey a5e46d4627 Расширить обмен по шинам, CAN-адаптеры и обработку графиков
Добавить очереди операций PBUS/SBUS, общую консоль, настройки Candle и SLCAN, декодеры DSView и обработку плотных графиков. Обновить протокол Бальзам и проверки общих компонентов.
2026-10-17 14:36:14 +03:00

124 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Декодеры DSView для шин 96-контактного интерфейса
Два независимых декодера: **Plates PBus** и **Plates SBus**. Показывают
адрес устройства, регистр, сырые 16-битные данные, результат проверок
и итог каждого обращения. Повторные одинаковые обращения выводятся отдельно.
Декодеры устанавливаются в DSView и разбирают цифровой захват шин,
используемых с SETGUI. Формат взят из `ParallelBusSlave_ver_2_0.vhd`
и `SerialBusSlave_ver_2_0.vhd` из `ip_repo` репозитория PlatesSim. Зависимости
от установленного SETGUI или PlatesConf нет. Число 96 относится
к разъёму; ширина данных PBus составляет 16 бит.
## Установка
1. Закрыть DSView.
2. Скопировать обе папки `plates_pbus` и `plates_sbus` из `decoders`
в каталог `decoders` используемой установки DSView. Внутри каждой
папки должны непосредственно лежать `__init__.py` и `pd.py`.
3. Открыть DSView, загрузить захват или получить новый.
4. В списке декодеров выбрать **Plates PBus** либо **Plates SBus**
и назначить соответствующие каналы анализатора. При одновременном
захвате обеих шин добавить оба декодера.
Используется sigrok API 3 и синтаксис Python 3.6+. Формат декодеров
сверён со штатными пакетами установленного DSView и
[исходниками DSView](https://github.com/DreamSourceLab/DSView/tree/master/libsigrokdecode4DSL/decoders).
Общие сведения о пользовательских декодерах — в
[инструкции производителя](https://dreamsourcelab.cn/logic-analyzer/protocol_decoder_howto/).
## Каналы PBus
| Сигнал декодера | Подключение | Назначение |
| --- | --- | --- |
| PBCE | `pbce` | Низкий уровень разрешает транзакцию |
| PBACK | `pback` | Подтверждения адреса, данных и инверсии |
| D0…D15 | `pbdata[0]`…`pbdata[15]` | Все 16 разрядов общей двунаправленной шины |
| PBCLK | `pbclk`, необязательно | Проверка уровня тактовой линии в фазах ответа |
Для полного декодирования PBus требуется **18 каналов**, с PBCLK — 19.
Анализатор на 16 каналов не захватит полный набор одновременно.
Назначать D0…D15 по номерам разрядов шины, а номера контактов
96-контактного разъёма брать из схемы конкретной платы.
Операция начинается со спада PBCE. Первый спад PBACK подтверждает адрес:
`PBDATA[15:8] = dev*16 + reg`, `PBDATA[7:0] = ~PBDATA[15:8]`.
Следующий подъём PBACK подтверждает 16-битные данные; следующий спад —
их 16-битную инверсию. При назначенном PBCLK данные должны подтверждаться
при CLK=0, инверсия — при CLK=1. Выборка слов выполняется по ACK.
Неверная инверсия адреса, неверная инверсия ответа, нарушение фазы CLK
и незавершённое ожидание ACK выводятся отдельными предупреждениями.
Снятие CE до завершения или конец захвата сохраняют частичную операцию
с признаком `complete=False`. Начальный фрагмент захвата с уже низким CE
пропускается до следующего полного начала транзакции.
## Каналы SBus
| Сигнал декодера | Подключение | Направление |
| --- | --- | --- |
| SBCLK | `sbclk` | Тактовая линия мастера |
| SBDATAIN | `sbdatain` | ТМС → платы |
| SBDATAOUT | `sbdataout` | Платы → ТМС |
Для SBus достаточно **трёх каналов**. Имена IN/OUT соответствуют
входу и выходу ведомого блока в HDL.
Кадр содержит 29 бит старшим вперёд: направление (0 — чтение,
1 — запись), устройство (4), регистр (4), данные (16), CRC (4).
Декодер выбирает биты по нарастающим фронтам SBCLK. Заголовок и данные
записи идут по SBDATAIN; данные чтения и CRC ответа — по SBDATAOUT.
CRC учитывает все 25 бит направления, адреса и данных, а затем
четыре завершающие единицы по алгоритму HDL. Это собственный алгоритм,
его нельзя заменять произвольным штатным CRC-4.
| Параметр | По умолчанию | Смысл |
| --- | --- | --- |
| Frame gap (us) | 3,6 мкс | Минимальное время неподвижного CLK для синхронизации нового кадра |
| Write ACK sampling delay (us) | 0,5 мкс | Задержка выборки SBDATAOUT после последнего бита CRC записи |
Пауза учитывается при обоих уровнях CLK. Значение 3,6 мкс взято
из текущих COUNT_RESET=180 и частоты блока SBus 50 МГц.
Задержка ACK 0,5 мкс — настраиваемая точка наблюдения после проверки CRC
и до сброса по паузе. Для другого ведомого или других времён обмена
параметры нужно согласовать с захватом. Межкадровая пауза должна превышать
длительность обычного неподвижного участка CLK внутри кадра;
задержка ACK должна быть положительной и меньше межкадровой паузы.
Низкий SBDATAOUT в точке выборки подтверждает запись. Высокий уровень
помечается `ACK HIGH (NACK / no response)`: по одному уровню нельзя
отличить отказ от отсутствия платы. CRC и ACK показываются независимо.
ACK frontend PlatesSim подтверждает CRC, но не доказывает помещение
команды в FIFO или её применение CPU1.
Если файл закончился до выборки ACK, полная запись сохраняется с `ack=None`.
Частичный кадр отмечается числом полученных битов; следующий кадр
синхронизируется после паузы. В начале захвата SBus ожидает наблюдаемую
паузу, чтобы фрагмент уже идущего обмена не стал ложным заголовком.
При записи включать в захват паузу перед первым кадром и время после CRC.
## Проверки и границы подтверждённого
Из корня репозитория:
```powershell
python -m unittest discover -s tools/dsview/tests -p test_plates_buses.py -v # Проверка декодеров на цифровых трассах без запуска DSView.
```
21 тест проверяет оба направления SBus, CRC, отдельную выборку ACK,
повторы, паузы обоих уровней, восстановление синхронизации, края диапазонов
PBus, обе инверсные проверки, фазы ACK, отсутствие каналов и обрывы захвата.
Среда тестов исполняет рабочие методы `decode()` и `end()` через подмену
API ожидания событий; сигналы формируются независимо от автоматов декодеров.
Дополнительно проверены синтаксис Python 3.6 и UTF-8 исходников.
Загрузка новых пакетов в интерфейсе DSView и захват физического обмена
с SETGUI пока не проверены. Номера контактов разъёма и соответствие каналам
анализатора задаются по фактическому подключению. Модели отдельных линий
TK/PWM/ACK в эти декодеры не входят.
Python-выход каждого декодера содержит `['FRAME', словарь]`. Общие поля:
`bus`, `operation`, `dev`, `reg`, `value`. У SBus отдельно доступны `crc`,
`crc_expected`, `crc_ok`, `ack`; у PBus — `address_word`, `address_ok`,
`inverse`, `inverse_ok`, `errors`, `complete`, `ok`.