dikabraz 0 14 апреля, 2023 Опубликовано 14 апреля, 2023 (изменено) · Жалоба Доброго дня, есть проект, код на хале отлажен и работает и на gd32f103c8t6 и на stm32f103c8t6, таймеры, шимы, клоки, из используемого. Будлоадер взят из https://github.com/Serasidis/STM32_HID_Bootloader и допилен под себя. Но на GD завести его я не могу, хоть убей, неизвестное устройство. В заголовок CMSIS добавил адрес регистра предделителя юсб на ГД и сбросил его #define RCC_CFGR_USBPRE ((uint32_t)0x00400000) /*!< USB Device prescaler */ #define RCC_CFGR_USBPREGD ((uint32_t)0x00800000) /*!< USB Device prescaler(23 bit) */ Сравнил регистры по USB прерываниям и прочему- вроде все совпадает. Проверку флеша выкинул вообще, так что остался только функционал подключения к юсб- и толку ноль. НА СТМ работает, на ГД- нет. Код инита клоков предоставляю вам: Спойлер static void set_sysclock_to_72_mhz(void) { SET_BIT(RCC->CR, RCC_CR_HSEON); while (READ_BIT(RCC->CR, RCC_CR_HSERDY) == 0) { ;} uint32_t *FMC_WSEN; FMC_WSEN = (uint32_t*)0x400220FC; FLASH->KEYR = FLASH_KEY1; FLASH->KEYR = FLASH_KEY2; *FMC_WSEN = (uint32_t)1; /* Enable Prefetch Buffer & set Flash access to 2 wait states */ SET_BIT(FLASH->ACR, FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_2); FLASH->CR |= FLASH_CR_LOCK; /* SYSCLK = PCLK2 = HCLK */ /* PCLK1 = HCLK / 2 */ /* PLLCLK = HSE /2(PLLXTPRE) * 9 = 72 MHz */ SET_BIT(RCC->CFGR, RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE2_DIV1 | RCC_CFGR_PPRE1_DIV2 | RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9 | RCC_CFGR_PLLXTPRE); /*сброс битов предделителя юсб в 00, что соответствует 1.5 */ CLEAR_BIT(RCC->CFGR, RCC_CFGR_USBPRE | RCC_CFGR_USBPREGD); /* Enable PLL */ SET_BIT(RCC->CR, RCC_CR_PLLON); /* Wait until PLL is ready */ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == 0) { ; } /* Select PLL as system clock source */ SET_BIT(RCC->CFGR, RCC_CFGR_SW_PLL); /* Wait until PLL is used as system clock source */ while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS_1) == 0) { ; } } Используется кварц 16мгц, поэтому PLLXTPRE активен. И вопрос по флешу, для GD32f103c8t6 ставить 0-wait? Господа, надеюсь на ваши подсказки, свою голову я уже сломал) (куплены в промэлектронике как потенциальная замена, вроде не подделка на клона) Изменено 14 апреля, 2023 пользователем dikabraz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 14 апреля, 2023 Опубликовано 14 апреля, 2023 · Жалоба 55 minutes ago, dikabraz said: Господа, надеюсь на ваши подсказки, свою голову я уже сломал) Добрый день! Я, конечно, не в курсе в деталях Вашего проекта, но обычно меня смущает вот это: 56 minutes ago, dikabraz said: код на хале отлажен и работает и на gd32f103c8t6 и на stm32f103c8t6 GD - это не клоны STM32. Я предлагаю работать с ними как с совершенно новыми/отличными от STM32 микроконтроллерами. P.S. Вот вчера как раз закончил загрузчик для GD32F450ZKT6. Смотрел только в доку на этот микроконтроллер и примеры для него. Тут можете найти мою тему про "косяк с нумерацией секторов в памяти Flash", как пример того, что необходимо работать с документацией на целевой микроконтроллер. Нет смысла надеяться тащить проекты "один в один" с одного на другой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dikabraz 0 14 апреля, 2023 Опубликовано 14 апреля, 2023 · Жалоба 1 час назад, haker_fox сказал: GD - это не клоны STM32. Я предлагаю работать с ними как с совершенно новыми/отличными от STM32 микроконтроллерами. Безусловно. Критичные струкруры я сравнил и пока все работает согласно задумке, в самом ядре проекта. два мануала курились параллельно) 1 час назад, haker_fox сказал: P.S. Вот вчера как раз закончил загрузчик для GD32F450ZKT6. Смотрел только в доку на этот микроконтроллер и примеры для него. Тут можете найти мою тему про "косяк с нумерацией секторов в памяти Flash", как пример того, что необходимо работать с документацией на целевой микроконтроллер. Нет смысла надеяться тащить проекты "один в один" с одного на другой. Хм, тогда вопрос: тот же самый ST-link, и на Geephey и на ГД и на СТМ одна прошивка. И, как я подозреваю, одинаковый DFU-лоадер(а в моем случае HID). И юсб работает. Искренне заявляю, в USB-стек я ни в зуб ногой, поэтому прошу пинка в сторону различий, ибо другим вариантом я вижу только полное переписывание стека на cmsis от GD, что займет много времени монотонной работы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 14 апреля, 2023 Опубликовано 14 апреля, 2023 · Жалоба 1 hour ago, dikabraz said: поэтому прошу пинка в сторону различий Я не искал различия) Просто взял USB Device MSC из примеров и адаптировл под свои нужды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dikabraz 0 14 апреля, 2023 Опубликовано 14 апреля, 2023 (изменено) · Жалоба 4 минуты назад, haker_fox сказал: Я не искал различия) Просто взял USB Device MSC из примеров и адаптировл под свои нужды. Не хотел плодить лишних сущностей и обойтись дефайном в крайнем случае) ну ладно, что уж, будем писать) (Хмм, для начала можно попробовать отрубить оптимизацию) Изменено 14 апреля, 2023 пользователем dikabraz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 14 апреля, 2023 Опубликовано 14 апреля, 2023 · Жалоба 1 час назад, dikabraz сказал: Критичные струкруры я сравнил и пока все работает согласно задумке Даже идентичность регистров периферии ничего не гарантирует. Если в ПО есть баг, который например пишет что-то в reserved-поля или читает из них (не маскируя), то это может приводить к глюкам на одном и нормальной (вроде как) работе на другом. Всякие нагугленные в инете примеры кода барахло как правило содержит в себе "перлы", типа операций чтения-модификации-записи write-only IO-регистров или IO-регистров, имеющих разную функциональность по записи и по чтению. И если на STM например такой write-only регистр на чтение возвращал 0, а на GD - нечто отличное от 0, то тут пользователь этого кода и получит граблями по лбу при переезде на GD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dikabraz 0 14 апреля, 2023 Опубликовано 14 апреля, 2023 (изменено) · Жалоба 10 часов назад, jcxz сказал: Даже идентичность регистров периферии ничего не гарантирует. Если в ПО есть баг, который например пишет что-то в reserved-поля или читает из них (не маскируя), то это может приводить к глюкам на одном и нормальной (вроде как) работе на другом. Всякие нагугленные в инете примеры кода барахло как правило содержит в себе "перлы", типа операций чтения-модификации-записи write-only IO-регистров или IO-регистров, имеющих разную функциональность по записи и по чтению. И если на STM например такой write-only регистр на чтение возвращал 0, а на GD - нечто отличное от 0, то тут пользователь этого кода и получит граблями по лбу при переезде на GD. Кхм, примерно поэтому я люблю hal, как неплохой уровень абстракции бизнес-логики. Он не даёт мне выстрелить себе в ногу, ошибись я в сдвиговой операции, я, в свою очередь, не ограничен халом и в том же обработчике прерывания могу хоть напрямую в адрес по указателю писать. П.с. у меня стоит на плате тайпси, резисторы по 10ом, д+ постоянно подтянут 1.5к к 3.3в. П.с.2 я просто люблю cubeide, там все удобно для ленивого меня) Изменено 14 апреля, 2023 пользователем dikabraz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 25 ноября, 2023 Опубликовано 25 ноября, 2023 · Жалоба On 4/14/2023 at 10:38 AM, dikabraz said: *FMC_WSEN = (uint32_t)1 Как вы вот это делаете? Никак не пишется у меня этот бит. В дебаггере этот бит всегда 0, и если считывать значение этого регистра в любом месте кода, тоже всегда 0. В своём проекте повторяю ваш код, но бит не пишется. Пробовал ставить задержки во все места - не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 25 ноября, 2023 Опубликовано 25 ноября, 2023 · Жалоба Цитата This bit is set and reset by software. This bit also protected by the FMC_KEYx register. It is necessary to writing 0x45670123 and 0xCDEF89AB to the FMC_KEYx register А не просто записать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 25 ноября, 2023 Опубликовано 25 ноября, 2023 · Жалоба 1 hour ago, Arlleex said: А не просто записать. Я в курсе: //---Variables---// uint32_t temp = 0; uint32_t *FMC_WSEN_ADDR = (uint32_t*)0x400220FC; //---------------// //fmc_unlock(); FMC_KEY0 = UNLOCK_KEY0; FMC_KEY0 = UNLOCK_KEY1; FMC_KEY1 = UNLOCK_KEY0; FMC_KEY1 = UNLOCK_KEY1; *FMC_WSEN_ADDR = (uint32_t)1; // ПИШЕМ 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! temp = RCU_ClockFreq_Get(CK_SYS); if(temp <= 24000000) FMC_WS = WS_WSCNT_0; // Wait state counter: 0 wait state added. else if ( (temp > 24000000) && (temp <= 48000000)) FMC_WS = WS_WSCNT_1; // Wait state counter: 1 wait state added. else // if temp > 48000000 FMC_WS = WS_WSCNT_2; // Wait state counter: 2 wait state added. fmc_lock(); temp = FMC_WSEN; // ТУТ ВСЕГДА 0, ХОТЯ ДОЛЖНО БЫТЬ 1!!!!!!!!!!!!!!!!!!!!!!!!! Но всё равно не пишется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
0men 2 28 ноября, 2023 Опубликовано 28 ноября, 2023 · Жалоба On 4/14/2023 at 11:36 AM, haker_fox said: Добрый день! Я, конечно, не в курсе в деталях Вашего проекта, но обычно меня смущает вот это: GD - это не клоны STM32. Я предлагаю работать с ними как с совершенно новыми/отличными от STM32 микроконтроллерами. P.S. Вот вчера как раз закончил загрузчик для GD32F450ZKT6. Смотрел только в доку на этот микроконтроллер и примеры для него. Тут можете найти мою тему про "косяк с нумерацией секторов в памяти Flash", как пример того, что необходимо работать с документацией на целевой микроконтроллер. Нет смысла надеяться тащить проекты "один в один" с одного на другой. еще раз повторюсь, в плане нумерации секторов гд ничем от стма не отличается и гд клон стма на 99%, в случае с ф4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба 7 hours ago, 0men said: еще раз повторюсь, в плане нумерации секторов гд ничем от стма не отличается и гд клон стма на 99%, в случае с ф4 А какой смысл отвечать на сообщение полугодичной давности? Я для себя вывод сделал и вывод - однозначный: читать документацию как на иной микроконтроллер, ну может быть очень редко подглядывать в документацию на STM32 в надежде прояснить какие-то уж совсем тёмные моменты в аналогии, если таковая есть. Вот только практика обращений показывает, что люди нередко попадают в этот 1% заблуждений. А по сути - не читают документацию вообще, рассчитывая на то, что GD32 - это клон STM32. Даже bin-файл заливают тот же самый. И в целом: работает, да и ладно. P.S. Раз уж заговорили об этих GD32 снова, то хочу сказать, что за год работы пришёл к выводу, что не смотря на скудную документацию (если сравнивать с эталонами документописания от ST или NXP), эти микроконтроллеры вполне пригодны для полноценной работы. Но пока ни одного ещё прибора мы не выпустили, т.к. эти микроконтроллеры применили для свежих своих разработок. Поэтому сказать что-либо о полноценном их использовании в различных условиях климата, помех и т.д. и т.п. я не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vit496 0 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба On 11/25/2023 at 1:17 PM, LAS9891 said: Но всё равно не пишется А зачем его устанавливать? Я нигде в примерах от GD не видел использование этого бита. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба 1 minute ago, vit496 said: А зачем его устанавливать? Я нигде в примерах от GD не видел использование этого бита. И я нигде не видел официального примера или описания настройки регистра FMC_WS. Только эту статью. А вот тут говорят вообще не надо ничего настраивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vit496 0 29 ноября, 2023 Опубликовано 29 ноября, 2023 · Жалоба 19 minutes ago, LAS9891 said: И я нигде не видел официального примера или описания настройки регистра FMC_WS. Только эту статью. А вот тут говорят вообще не надо ничего настраивать. Я видел статью, пробовал менять, но никаких изменений, как у автора, не заметил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться