В библиотеке libUHSIF.a замечены следы Cypress FX3 (ныне -
Infineon). И всякое такое. Хабарка. Платы с H417 на руках тогда не было, а узнать, какие ножки в реальности захватывает закрытая библиотека libUHSIF.a, было необходимо до рисования схемы. Поэтому 17 октября я устроил блобу допрос без железа: написал на Python небольшой эмулятор RISC-V, скормил ему скомпилированный код инициализации и прогнал все 144 комбинации параметров UHSIF_GPIO_Init(), записывая каждое обращение к регистрам GPIO и мультиплексора выводов.
Так, ещё до разводки платы, я узнал точный список из 28 ножек шины под ПЛИС и поймал реальный конфликт: сам блоб чужие пины не трогает, а вот штатная функция SD_GPIO_Init() из открытой части SDK молча перетирает линии данных шины PC8/PC9 (для SD-карты напишу свою короткую инициализацию). Мы обсудили этот закрытый блоб с глубокоуважаемым Артёмом Кашкановым, и он решил помочь — буквально на следующий день нырнул в эту задачу в своём проекте rln-trace! Артём прогнал всю библиотеку под трассировкой в эмуляторе Spike/Unicorn, раскопал внутри таблиц настройки настоящий «микрокод» конечного автомата диаграмм (очень похожий на GPIF II из Cypress FX3, который приходится вытаскивать из блоба как есть) и написал открытый драйвер fw/uhsif — он собирается обычным GCC без кастомных инструкций WCH и в CI до единого обращения к регистрам сверяется с оригинальной библиотекой!
Ну и вообще - здоровое безумие с привлечением ИИшенок.
https://habr.com/ru/companies/timeweb/articles/1101340/