Мы используем файлы cookie. Продолжая использование сайта, вы соглашаетесь с этим.
OK

Raspberry Pi 5: почему ваше ПО может внезапно перестать работать

В этой статье делимся своим опытом, который получили при работе с Raspberry Pi 5 разных аппаратных ревизий.

Когда Raspberry Pi 5 вышла осенью 2023 года, она имела две комплектации - 4GB и 8GB памяти - обе на Broadcom SoC со stepping’ом C1. Позднее была представлена более доступная версия с 2GB памяти, после чего в линейке произошли менее заметные, но крайне важные изменения.
Эта самая 2GB-модель получила новый stepping - D0 (на фото он нижний). Broadcom переработала кристалл: кремниевая матрица уменьшилась на 33%, некоторые «темные» логические блоки (dark silicon) убрали за ненадобностью, архитектуру ужали - и в итоге получили до 30% меньшего потребления энергии в режиме ожидания. Отличная оптимизация… формально.
Подобная оптимизация привела к существенным изменениям на уровне Device Tree. D0 stepping - это фактически другое аппаратное решение, не полностью совместимое с C1.
Разработчики Raspberry Pi Foundation не просто заменили один чип на другой. Они поменяли Device Tree Source (DTS) файлы, переместили регистры, переназначили GPIO, и самое главное - изменили подход к управлению периферией. Затем, во второй половине 2024 года, Broadcom начал применять D0 stepping и к стандартным моделям 4GB и 8GB. Теперь, когда вы покупаете Pi 5, вероятность получить D0 сильно выше 50%.

Возникшая проблема

Один из наших клиентов (которого мы искренне ценим) обратился с жалобой: ранее разработанное нами ПО, работавшее корректно на моделях со stepping C1, перестало функционировать на новых устройствах с D0.
Симптомы были следующими:
  • приложение стабильно работало на Raspberry Pi 5 с C1;
  • на моделях с D0 возникали ошибки при обращении к EEPROM;
  • журнал dmesg не содержал каких-либо диагностических сообщений.
  1. Проверка аппаратной части не выявила отклонений: контакты исправны, сигналы присутствуют, пайка не нарушена.

Ход решения

Шаг 1: Проверили версию железа
Подтвердилось: D0 stepping, ревизия платы 1.1.
Шаг 2: Залезли в Device Tree
И начали искать изменения, специфичные для D0.
Шаг 3: Вытянули DTS и сравнили с C1
Выяснилось, что в одном коммите Broadcom переписала солидный кусок C1-специфичного кода. Соответственно, регистры и подсистемы на D0 могут оказаться в других адресах - или вовсе отключенными.
Шаг 4: Обновили Raspbian до последней версии
Старые образы ОС ничего не знали о D0 и работали как будто перед ними всё тот же C1. После обновления поддержка появилась.
Шаг 5: Перезагрузились (около 15 раз)… и все заработало!

Практические выводы

Всегда проверяйте ревизию платы.
Rev 1.0 = C1, Rev 1.1 = D0. Это не просто косметическая правка, а архитектурная разница.
У EEPROM на D0 своё мнение о жизни.
И оно отличается от EEPROM на C1.
Device Tree — лучший друг embedded-разработчика.
Компилируйте .dts → .dtb, изучайте, сравнивайте. Часто ответ спрятан в одном закомментированном фрагменте.
Синхронизируйте Raspbian и ядро.
Старое ядро может вообще «не видеть» D0. Обновляйтесь пакетно.
Привлекайте специалистов по embedded-разработке.
Корректный анализ аппаратно-программных несоответствий экономит значительное время. Кроме того, вы всегда можете обратиться к нам в ЦПР РТСофт - подскажем и поможем решить даже самые сложные задачи.
D0 stepping - это не просто оптимизация для экономии, а фактически новая архитектура, упакованная в старый формфактор. Если вы разрабатываете на Pi 5, убедитесь, что ваше ПО работает с обеими версиями. Иначе рано или поздно вы получите батарею багов, которые воспроизвести на предыдущих версиях устройства не удастся.
ЦПР РТСофт может стать надежным партнером для реализации ваших проектов. Cпециалисты RTSoft готовы оказать экспертную поддержку - для этого направьте запрос по адресу info@list.dev.rtsoft.ru

Наши статьи: