В течении последнего года я запустил серийные проекты на микроконтроллерах CH32V307 и CH32V203. И в том или ином виде попробовал работать почти со всеми RISC-V ядрами от WCH. Анализ опыта работы, это отдельная история, сейчас хотел бы рассказать про структуру памяти старшей линейки WCH. В первую очередь, потому что, я, даже в сегменте англоязычных форумов, не нашел полной информации на эту тему. А небольшой объем памяти анонсируемый в даташитах, возможно многих отпугивает.
Память, которая то ли есть, а то ли ее нет?
В датишитах значится достаточно скромный объем FLASH. От 64KB до 256KB в зависимости от модели.
Несколько смущает только надпись Flash@SRAM.Но дальше по тексту этого уточнения нет. И вроде все очевидно. Но тут я решил поиграться в Ble и запустил примеры для СH32V208, где анонсирован флэш в 128KB. Собственно SDK к этому ядру стандартный от V2XX, за исключением Ble, который скопирован с Ble ядер СH5XX и аналогичных. Сборка любого примера Ble https://github.com/openwch/ch32v20x/tree/main/EVT/EXAM/BL, приводит к тому, что код занимает больше 128кБ. Ошибок при этом нет, и если посмотреть линк файл, видно что там объявлены 480KB флэш памяти. Не понятно. 480KB флэша, это же про 20Mhz Ble чип СH582, но при чем тут V208? Тем более что в примерах для обычной периферии, линк файл собирает код в сегмент размера 128KB.
Дальше, если внимательно присмотреться к документации по V3XX, то можно найти маленькую сноску про разделение FLASH на zero-wait и non-zero-wait.
Действительно, 480KB флэш. В аналогичных документах по семейству V2 завялены более скромные 256KB (при 64KB по даташиту). Это все легко проверить, подключившись к чипу программатором. Совсем непонятно что происходит...
Ответ про структуру памяти приходит при работе со старшими ядрами, в том числе V307.Для этих контроллеров возможно настройка конфигурации памяти.
Таким образом, в CH32V307 реально 320KB SRAM, часть из которой используется как кэш FLASH памяти. На каком уровне происходит копирование флэш в статику я информации так и не нашел.
Итого имеем следующие. Все микроконтроллеры V2XX и V3XX оснащены флэшем, размером 224KB или 480KB. Часть из него при старте автоматический кэшируется в статическую память и исполнение кода идет из статики. Реальный размер статической памяти во всех контроллерах, SRAM (по документации) + FLASH ( по документации). В более младших моделях статики меньше, и кэшируется меньший объем флэша. В более старших он доходит до 320KB, и есть возможность изменить распределение SRAM. Либо больше памяти данных, но не более 128KB, либо больше отдать под кэшируемый флэш. А что собственно, с оставшимся флэшем, который не попадет в кэш? А ничего, можно использовать.
Но есть нюанс.
Физический флэш тактируется от системный шины и делитель может быть 1 или 2, при максимальной частота тактирования флэш 60МhZ. Поэтому для использования этой области, частота системной шины не должна превышать 120Mhz. Максимальная частота для WCH в 144Mhz сразу отпадёт. Более низкие частоты тактирования системной шины, дадут скорость доступа к физическому флэшу ниже максимальной. При этом не стоит забывать про периферию, частоты тактирования SPI и AЦП к примеру ограничены. А делители периферийных шин переехали из STMF103, c родной частотой в 72Mhz. Фактический, использовать вот вообще все на максимальных частотах одновременно не получиться, продеться искать какой-то компромисс. Мне лично не нужны максимальные частоты АЦП и SPI, а вот дополнительный флэш может пригодиться.
Как этот флэш использовать, уже вопрос. В родном SDK для Ble, объявлен отельной сектор, распложённый в кэшируем флэше, куда линкуется TMOS, операционная система стека Ble (хотя это не совсем ОС). Все остальное собирается линейно, без контроля куда что попадает. В листингах видно, что функция начинается в кешируем флэше, а заканчивается в медленном... Я в своем коде наоборот объявил сектор для медленного флэша, куда скидываю инициализацию.
В глубины, насколько медленный флэш снижает производительность я пока не копал. Но по итогу, думаю что наличие пусть более медленного, но все таки приличного объема доп. флэша, существенно может расширить сферы применения микроконтроллеров WCH.
Комментарии (23)
Sap_ru
16.11.2024 08:07Возможно, что "медленный" флэш на самом деле медленный. Такое было распространено на заре 32-битный контроллеров (всякая экзотика от Infineon). Часть флэша подключена по 8-битной шине. Пользуйся сколько угодно, но скорость будет в 4 раза ниже.
Второй вариант, до сих пор очень распространённый в мире ARM, и на него намекает ваш даташит из старших контроллеров, это когда флэш (или его часть) подключен по SPI, а данные из него при старте копируются в ОЗУ, откуда дальше и исполняются. Причём у некоторых контроллеров есть возможность исполнения кода, оставшегося во флэше - копирование в ОЗУ происходит "на лету" по мере обращения специальным аппаратно-программным загрузчиком. Само собой, что обращение к такому флешу оказывается на порядок (и даже больше) медленнее обычного.В целом похоже, что китайцы наконец дорвались до более-менее современных технологий и первым делом начали творить монстров с твёрдым намереньем лично собрать все возможные грабли разработки контроллеров за последние 30 лет. И естественно, что всё это без документации (на заре становления контроллеров, хоть было принято максимально исчерпывающую документацию давать, что заметно сокращало боль пользователей).
Astroscope
16.11.2024 08:07И естественно, что всё это без документации
Поэтому многочисленные STM32, которым WCH бесхитростно подражает названиями своих
клоновмоделей, похоже, вне опасности.
Smoke666 Автор
16.11.2024 08:07В целом похоже, что китайцы наконец дорвались до более-менее современных технологий и первым делом начали творить монстров с твёрдым намереньем лично собрать все возможные грабли разработки контроллеров за последние 30 лет.
Очень точно подмечено. Но если провести параллели с автопромом, то есть шанс что свои уроки они будут учить быстро. И возможно, в каких то секторах уйдут вперед. Так что я ставлю в среднесрочной перспективе на Китайцев и RISC-V, это будет их Byd и Zeekr в микроконтроллерах:)
И естественно, что всё это без документации
Без англоязычной документации:) У меня впечатление, что мы недооцениваем объем локального Китайского рынка. Или переоцениваем свою значимость для Китайских брендов:)
Sap_ru
16.11.2024 08:07У них есть та проблема, что они сильно увлечены копированием и переиспользованием уже скопированного, что тормозит разработку своего. В результате тянутся из поколения в поколение (да ещё и в разных архитектурах) тянутся эти кривые блоки периферии от копии STM32F1xx. Хотя логично было бы при разработке своей архитектуры хотя бы известные баги поправить, не говоря уже нормальной адаптации или развитии. И получается процессоры с частотой периферии 144Мгц, у которых всё остальное этой частоте не кратно и потому с максимальной производительностью работать не может. И так во всё. Даже если они разрабатывают что-то своё, то при минимальной успехе разработка останавливается, обвешивается уже имеющимся ужасом, продаётся за копейки, и из успешной разработки выжимаются все соки. Никакого серьёзного развития не происходит.
А в это время западные разработчики используют нормальные схемы развития продуктов и получают качественные улучшения и поступательное развитие.Smoke666 Автор
16.11.2024 08:07Ну деньги то сами себя не заработают:) Совместимые корпуса, знакомая периферия, низкая цена - норм стратегия по выходу на рынок. Кому Китайцы глобально нафиг сдалиcь лет 5 назад, когда F103 был меньше бакса? А в пандемию, половина рынка услышала от STM - несите ваши деньги и поставим вас в очередь на производство через пару лет, а вторая увидела F103 по 15USD:) Инженерная школа опять же таки сама себя не создаст. Что бы делать прям свое, без оглядки на предыдущие наработки и старших товарищей, надо и рынок сбыта иметь как у STM и бюджеты разработки сопоставимые. Посмотрим на следующие генерации. А пока да, плачем и жуем кактус:)
man55
16.11.2024 08:07У микроконтроллеров Artery устроено все плюс-минус так же. И это, внезапно, вызвало невозможность их применения в микропотребляющих устройствах. Некоторое время не могли понять, потом заподозрили как раз механизм кэширования, написали китайцам и те с неохотой подтвердили.
При старте контроллер еще до начала исполнения кода некоторое время (десятки миллисекунд) как раз занимается перекладыванием из FLASH в SRAM и жрет при этом как не в себя (по меркам батарейных устройств). И это увы никак не лечится (. Зато потом да, хоть до 200 МГц разгоняй.
jaha33
16.11.2024 08:07Такое ощущение что все st клоны используют одно и то же ip ядро или что то подобное, незнаю как назвать. Видишь китайские чипы от разных производителей с частотой 144 мгц, то скорее всено у них внутри есть единый одинаковый орган и у него одни и те же проблемы. Это и artery, и wch, и nations, вполне возможно и geehy туда же
Ну или они так друг у друга копируют, как с китайскими авто младшего сегмента, все друг на друга похожи, 150 лс с турбиной и робот семиступка
Dark_Purple
16.11.2024 08:07Флеш может быть вообще SPIйный, может быть отдельным кристаллом в корпусе лежать, но мапиться на реальное адресное пространство и может быть ну очень медленным.
zurabob
16.11.2024 08:07Китайцы конечно максимально замели под шкаф тему теневого копированиния в ОЗУ, но общий размер флеша есть на первой странице:
Available with 480KB program memory CodeFlash (zero-wait application area + non-zero-wait data area)
Далее в сноске к таблице моделей:
Note: 1. Flash bytes represent zero-wait run area R0WAIT. For the V303/V305/V307 series, non-zero-wait area
is (480K-R0WAIT)
И ниже это косвенно указано в комменте ко времени выхода из Standby
LDO stabilization time + HSI RC clock wake up + code load time(2) (take 256K as example)Но конечно это очень непривычно после даташитов от ST, аналогом которого якобы являются китайские чипы(не эти). И это еще ТС не писал во флеш, где тоже похоже есть подводные камни со скоростью. судя по форумам.
jaha33
16.11.2024 08:07Техподдержка wch кстати никакого нормального объяснения устройства памяти не дает, мол читайте даташит
Smoke666 Автор
16.11.2024 08:07Я тут неделю назад через Google Translate зашел на Китайский суппорт WCH и открыл для себя какой-то нескончаемый океан информации. У меня последние время складывается следующие впечатление. Мы тут все гоним на кривожопых Китайцев, документов мол нет, на вопросы не отвечают. А на самом деле, Китайцы просто положили длиннющий желтый болт на англоязычный сектор сбыта ибо у внутренний рынок цветет и пахнет, и нафиг мы им ту не сдалась:)
AlexGfr
16.11.2024 08:07По опыту с CH32F, если установить частоту шины 120 МГц запись во flash корректно работает не на каждом экземпляре МК. Т.е. 120 это прям предел, совсем без запаса.
Smoke666 Автор
16.11.2024 08:07Ого, интересно. А в какой пишете, в кэшируемый или за его пределы? И каким методом, стандартным или быстрым?
nixtonixto
16.11.2024 08:07Родоначальник этого направления - Gigadevice, внешний чип флеш-памяти позволил им выпускать контроллеры семейства F1 с объёмом до 3 МБ, чего не было у STM.
NutsUnderline
16.11.2024 08:07Но тут я решил поиграться в Ble
что интересного можно почитать в их bt стэке?
Smoke666 Автор
16.11.2024 08:071. Можно послушать лекции с жутким акцентом https://m.youtube.com/watch?v=6NE61BdSvqA На том же канале еще 3 части. Вот код к этим видосикам на оф. аккаунте WCH на Git. https://github.com/openwch/ch32_training_documentation/tree/main/04_remote_control_car
Это вообще единственное что официально есть про CH32V208:)
2 .Самое интересное что я накопал вот https://codeload.github.com/treideme/reaction-trainer/zip/refs/heads/master По проекту у чувака есть немного инфы на его стайте, искать надо, не помню уже. Найти можно. Там суть в чем, чувак запустил на CH32V208 RT-Thread, а в ее потоке запустили TMOS со стеком Ble.
NutsUnderline
16.11.2024 08:07это тоже интересно, но я в плане личного опыта: есть ли там какие то странности, необычности, принципиальные проблеммы
Smoke666 Автор
16.11.2024 08:07О, нет. Я просто посмотреть че вообще такое BLE запустил, так сказать для расширения кругозора:) Поскольку я других стеков ble не видел, мне сложно судить о корявости решения от wch. Если чисто о впечатлениях, они стек перетащили откуда-то сбоку. Он идет в составе операционки TMOS единой библиотекой на asm. В TMOS можно вкидывать callback на свои прикладные задачи. TMOS вытеснять задачи не умеет, так что не рассчитал время прикладного процесса, сломал стек:) Отсюда моя вторя ссылка на проект под RT-Thread. Как я нашел инфу на китайском сапорте, CH581 и прочие мелкие ядра, были экспериментом по закинуть к ble чутка периферии. А CH32V208 это эксперимент по накинуть на эксперимент с мелкими ядрами нормальную машину. И по моим ощущениям они сами не очень понимают что у них получилось:) Как итог, V208 сырой прям жесть. Весь SDK натянут с CH581 и прочих чахлых машинок, они мне не интересны, не смотрел туда. Но судя по китайском саппорту, у себя на родине они вполне популярный продукт.
NutsUnderline
16.11.2024 08:07да уж, закрытая либа на c + бинарный блоб в .hex файлах, почти все внутри, но, кое какие ниточки подергать похоже можно
Mcublog
Спасибо, за статью. Думал я один не понимаю, какие действительно объемы sram и flash у этих чипов))