В течении последнего года я запустил серийные проекты на микроконтроллерах 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.

 Note: 1. Flash bytes represent zero-wait run area R0WAIT. For the V303/V305/V307 series, non-zero-wait area is (480K-R0WAIT).
Note: 1. Flash bytes represent zero-wait run area R0WAIT. For the V303/V305/V307 series, non-zero-wait area is (480K-R0WAIT).

Действительно, 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)


  1. Mcublog
    16.11.2024 08:07

    Спасибо, за статью. Думал я один не понимаю, какие действительно объемы sram и flash у этих чипов))


  1. Sap_ru
    16.11.2024 08:07

    Возможно, что "медленный" флэш на самом деле медленный. Такое было распространено на заре 32-битный контроллеров (всякая экзотика от Infineon). Часть флэша подключена по 8-битной шине. Пользуйся сколько угодно, но скорость будет в 4 раза ниже.
    Второй вариант, до сих пор очень распространённый в мире ARM, и на него намекает ваш даташит из старших контроллеров, это когда флэш (или его часть) подключен по SPI, а данные из него при старте копируются в ОЗУ, откуда дальше и исполняются. Причём у некоторых контроллеров есть возможность исполнения кода, оставшегося во флэше - копирование в ОЗУ происходит "на лету" по мере обращения специальным аппаратно-программным загрузчиком. Само собой, что обращение к такому флешу оказывается на порядок (и даже больше) медленнее обычного.

    В целом похоже, что китайцы наконец дорвались до более-менее современных технологий и первым делом начали творить монстров с твёрдым намереньем лично собрать все возможные грабли разработки контроллеров за последние 30 лет. И естественно, что всё это без документации (на заре становления контроллеров, хоть было принято максимально исчерпывающую документацию давать, что заметно сокращало боль пользователей).


    1. Astroscope
      16.11.2024 08:07

      И естественно, что всё это без документации

      Поэтому многочисленные STM32, которым WCH бесхитростно подражает названиями своих клонов моделей, похоже, вне опасности.


    1. Smoke666 Автор
      16.11.2024 08:07

      В целом похоже, что китайцы наконец дорвались до более-менее современных технологий и первым делом начали творить монстров с твёрдым намереньем лично собрать все возможные грабли разработки контроллеров за последние 30 лет.

      Очень точно подмечено. Но если провести параллели с автопромом, то есть шанс что свои уроки они будут учить быстро. И возможно, в каких то секторах уйдут вперед. Так что я ставлю в среднесрочной перспективе на Китайцев и RISC-V, это будет их Byd и Zeekr в микроконтроллерах:)

      И естественно, что всё это без документации 

      Без англоязычной документации:) У меня впечатление, что мы недооцениваем объем локального Китайского рынка. Или переоцениваем свою значимость для Китайских брендов:)


      1. Sap_ru
        16.11.2024 08:07

        У них есть та проблема, что они сильно увлечены копированием и переиспользованием уже скопированного, что тормозит разработку своего. В результате тянутся из поколения в поколение (да ещё и в разных архитектурах) тянутся эти кривые блоки периферии от копии STM32F1xx. Хотя логично было бы при разработке своей архитектуры хотя бы известные баги поправить, не говоря уже нормальной адаптации или развитии. И получается процессоры с частотой периферии 144Мгц, у которых всё остальное этой частоте не кратно и потому с максимальной производительностью работать не может. И так во всё. Даже если они разрабатывают что-то своё, то при минимальной успехе разработка останавливается, обвешивается уже имеющимся ужасом, продаётся за копейки, и из успешной разработки выжимаются все соки. Никакого серьёзного развития не происходит.
        А в это время западные разработчики используют нормальные схемы развития продуктов и получают качественные улучшения и поступательное развитие.


        1. Smoke666 Автор
          16.11.2024 08:07

          Ну деньги то сами себя не заработают:) Совместимые корпуса, знакомая периферия, низкая цена - норм стратегия по выходу на рынок. Кому Китайцы глобально нафиг сдалиcь лет 5 назад, когда F103 был меньше бакса? А в пандемию, половина рынка услышала от STM - несите ваши деньги и поставим вас в очередь на производство через пару лет, а вторая увидела F103 по 15USD:) Инженерная школа опять же таки сама себя не создаст. Что бы делать прям свое, без оглядки на предыдущие наработки и старших товарищей, надо и рынок сбыта иметь как у STM и бюджеты разработки сопоставимые. Посмотрим на следующие генерации. А пока да, плачем и жуем кактус:)


  1. man55
    16.11.2024 08:07

    У микроконтроллеров Artery устроено все плюс-минус так же. И это, внезапно, вызвало невозможность их применения в микропотребляющих устройствах. Некоторое время не могли понять, потом заподозрили как раз механизм кэширования, написали китайцам и те с неохотой подтвердили.

    При старте контроллер еще до начала исполнения кода некоторое время (десятки миллисекунд) как раз занимается перекладыванием из FLASH в SRAM и жрет при этом как не в себя (по меркам батарейных устройств). И это увы никак не лечится (. Зато потом да, хоть до 200 МГц разгоняй.


    1. jaha33
      16.11.2024 08:07

      Такое ощущение что все st клоны используют одно и то же ip ядро или что то подобное, незнаю как назвать. Видишь китайские чипы от разных производителей с частотой 144 мгц, то скорее всено у них внутри есть единый одинаковый орган и у него одни и те же проблемы. Это и artery, и wch, и nations, вполне возможно и geehy туда же

      Ну или они так друг у друга копируют, как с китайскими авто младшего сегмента, все друг на друга похожи, 150 лс с турбиной и робот семиступка


  1. Dark_Purple
    16.11.2024 08:07

    Флеш может быть вообще SPIйный, может быть отдельным кристаллом в корпусе лежать, но мапиться на реальное адресное пространство и может быть ну очень медленным.


  1. 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, аналогом которого якобы являются китайские чипы(не эти). И это еще ТС не писал во флеш, где тоже похоже есть подводные камни со скоростью. судя по форумам.


    1. jaha33
      16.11.2024 08:07

      Техподдержка wch кстати никакого нормального объяснения устройства памяти не дает, мол читайте даташит


      1. Smoke666 Автор
        16.11.2024 08:07

        Я тут неделю назад через Google Translate зашел на Китайский суппорт WCH и открыл для себя какой-то нескончаемый океан информации. У меня последние время складывается следующие впечатление. Мы тут все гоним на кривожопых Китайцев, документов мол нет, на вопросы не отвечают. А на самом деле, Китайцы просто положили длиннющий желтый болт на англоязычный сектор сбыта ибо у внутренний рынок цветет и пахнет, и нафиг мы им ту не сдалась:)


  1. AlexGfr
    16.11.2024 08:07

    По опыту с CH32F, если установить частоту шины 120 МГц запись во flash корректно работает не на каждом экземпляре МК. Т.е. 120 это прям предел, совсем без запаса.


    1. Smoke666 Автор
      16.11.2024 08:07

      Ого, интересно. А в какой пишете, в кэшируемый или за его пределы? И каким методом, стандартным или быстрым?


  1. nixtonixto
    16.11.2024 08:07

    Родоначальник этого направления - Gigadevice, внешний чип флеш-памяти позволил им выпускать контроллеры семейства F1 с объёмом до 3 МБ, чего не было у STM.


  1. NutsUnderline
    16.11.2024 08:07

    Но тут я решил поиграться в Ble 

    что интересного можно почитать в их bt стэке?


    1. Smoke666 Автор
      16.11.2024 08:07

      1. Можно послушать лекции с жутким акцентом 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.


      1. NutsUnderline
        16.11.2024 08:07

        это тоже интересно, но я в плане личного опыта: есть ли там какие то странности, необычности, принципиальные проблеммы


        1. Smoke666 Автор
          16.11.2024 08:07

          О, нет. Я просто посмотреть че вообще такое BLE запустил, так сказать для расширения кругозора:) Поскольку я других стеков ble не видел, мне сложно судить о корявости решения от wch. Если чисто о впечатлениях, они стек перетащили откуда-то сбоку. Он идет в составе операционки TMOS единой библиотекой на asm. В TMOS можно вкидывать callback на свои прикладные задачи. TMOS вытеснять задачи не умеет, так что не рассчитал время прикладного процесса, сломал стек:) Отсюда моя вторя ссылка на проект под RT-Thread. Как я нашел инфу на китайском сапорте, CH581 и прочие мелкие ядра, были экспериментом по закинуть к ble чутка периферии. А CH32V208 это эксперимент по накинуть на эксперимент с мелкими ядрами нормальную машину. И по моим ощущениям они сами не очень понимают что у них получилось:) Как итог, V208 сырой прям жесть. Весь SDK натянут с CH581 и прочих чахлых машинок, они мне не интересны, не смотрел туда. Но судя по китайском саппорту, у себя на родине они вполне популярный продукт.


          1. NutsUnderline
            16.11.2024 08:07

            вот вот вот я про это, спасибо


          1. NutsUnderline
            16.11.2024 08:07

            да уж, закрытая либа на c + бинарный блоб в .hex файлах, почти все внутри, но, кое какие ниточки подергать похоже можно


  1. sing01
    16.11.2024 08:07

    Можно исправить текст?

    В тексте и теге опечатка: архитектура же не "RISK-V", а "RISC-V".

    П тексту нет единообразия: в одном месте " Кб", в другом "КБ", в третьем "кБ" и даже "кб", короче все варианты испробованы.


    1. Smoke666 Автор
      16.11.2024 08:07

      Спасибо за замечание. Поправил.