ppj 0 23 июля, 2023 Опубликовано 23 июля, 2023 · Жалоба Соорудил простейший контроллер с помощью IP Core Generator, без отладки, одно прерывание, инициализация ITCM стандартным bootload из SDK(Gowin_EMPU_M1_V1.8) к Aurora. Keil настроил согласно инструкции, получил bin файл. Собрал контроллер, загрузил во внешнюю SPI-Flash, далее загрузил BIN файл. Загружал с верификацией. Контроллер не ожил. И так много раз... При этом пример с лампочками и прочие, более функциональные, программы, загруженные непосредственно в ITCM вполне себе работают. Может кто сталкивался с подобной проблемой? Поиск особо не помог... `resetall module cm1_demo_top ( GPIO, FLASH_SPI_HOLDN, FLASH_SPI_CSN, FLASH_SPI_MISO, FLASH_SPI_MOSI, FLASH_SPI_WPN, FLASH_SPI_CLK, HCLK, //System Clock hwRstn //System Reset ); input HCLK; // System clock input hwRstn; // System reset //GPIO inout [3:0] GPIO; //SPI-Flash inout FLASH_SPI_HOLDN; inout FLASH_SPI_CSN; inout FLASH_SPI_MISO; inout FLASH_SPI_MOSI; inout FLASH_SPI_WPN; inout FLASH_SPI_CLK; Gowin_EMPU_M1_Top u_Gowin_EMPU_M1_Top ( .LOCKUP(), .GPIO(GPIO), .FLASH_SPI_HOLDN(FLASH_SPI_HOLDN), .FLASH_SPI_CSN(FLASH_SPI_CSN), .FLASH_SPI_MISO(FLASH_SPI_MISO), .FLASH_SPI_MOSI(FLASH_SPI_MOSI), .FLASH_SPI_WPN(FLASH_SPI_WPN), .FLASH_SPI_CLK(FLASH_SPI_CLK), .HCLK(HCLK), //System Clock .hwRstn(hwRstn) //System Reset ); endmodule /* ****************************************************************************************** * @file main.c * @author GowinSemicoductor * @device Gowin_EMPU_M1 * @brief Main function. ****************************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "GOWIN_M1.h" /* Declarations ------------------------------------------------------------------*/ void GPIOInit(void); void delay(__IO uint32_t nCount); int main(void) { SystemInit();//Initializes system clock GPIOInit();//Initializes GPIO0 while(1) { GPIO_WriteBits(GPIO0,0xE); delay(1333000); GPIO_WriteBits(GPIO0,0xD); delay(1333000); GPIO_WriteBits(GPIO0,0xB); delay(1333000); GPIO_WriteBits(GPIO0,0x7); delay(1333000); GPIO_WriteBits(GPIO0,0xF); delay(1333000); } } //Initialize GPIO void GPIOInit(void) { GPIO_InitTypeDef GPIO_InitType; GPIO_InitType.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitType.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitType.GPIO_Int = GPIO_Int_Disable; GPIO_Init(GPIO0,&GPIO_InitType); GPIO_WriteBits(GPIO0,0xF);//light : low level } //delay void delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tren359 2 24 июля, 2023 Опубликовано 24 июля, 2023 · Жалоба С год назад столкнулся с этой проблемой - беда была в стартовых адресах загрузки (у меня 16-Мбит флэш стоит - адреса 0х400000 там нет вообще). Но не могу вспомнить, как решил ее. По итогу эта функция показалась мне бесполезной, т.к. приходилось каждый раз загружать и битстрим, и отдельно бинарник для софт-ядра, хотя я ожидал, что смогу просто перешивать бинарник. Для меня полезным оказался способ объединения битстрима и бинарника через поставляемую утилиту merge_bit. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ppj 0 24 июля, 2023 Опубликовано 24 июля, 2023 · Жалоба 36 minutes ago, tren359 said: С год назад столкнулся с этой проблемой - беда была в стартовых адресах загрузки (у меня 16-Мбит флэш стоит - адреса 0х400000 там нет вообще). Но не могу вспомнить, как решил ее. По итогу эта функция показалась мне бесполезной, т.к. приходилось каждый раз загружать и битстрим, и отдельно бинарник для софт-ядра, хотя я ожидал, что смогу просто перешивать бинарник. Для меня полезным оказался способ объединения битстрима и бинарника через поставляемую утилиту merge_bit. Большое спасибо за информацию. Полез смотреть что стоит в моём экземпляре. Оказалось: XT25F32B-S. В ней тоже нет адреса 0х400000. Теперь меня смущает то, что верификация при всём при том проходит нормально: Как с этим жить? Может есть исходники загрузчика? Просто адрес загрузочный изменить..... Что касается merge_bit... Этот вариант не намного удобней, с моей точки зрения, чем простая инициализация ITCM. Буду работать в двух направлениях: - переработка загрузчика - замена SPI-Flash Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ppj 0 24 июля, 2023 Опубликовано 24 июля, 2023 · Жалоба В завершение темы добавлю... Проверил теорию на Tang Nano 20K. В ней установлена flash WINBOND 25Q64JVIQ в ней есть адрес 0х400000 (и выше). Тестовый пример заморгал с первой попытки. Вывод: с китайской верификацией надо быть внимательней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tren359 2 26 июля, 2023 Опубликовано 26 июля, 2023 · Жалоба В 24.07.2023 в 11:52, ppj сказал: Буду работать в двух направлениях: - переработка загрузчика - замена SPI-Flash Оба направления рабочие: - заменил флэш на 64-Мбит - запустилось все без проблем; - в бутлоадре в файле itcm2 прописан адрес хранения бинарника для ARM ядра 40 00 00 (строки 87-89 при открытии в Notepad++). Меняем адрес на тот, что подходит для нашей флэш и не затирает область, хранящую битстрим (для моей 16-Мбит флэш и GW2A-LV18PG256 c максимальным размером битстрима 887 кбайт подошел адрес 0x100000) - и дело в шляпе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ppj 0 26 июля, 2023 Опубликовано 26 июля, 2023 (изменено) · Жалоба 4 hours ago, tren359 said: Оба направления рабочие: - заменил флэш на 64-Мбит - запустилось все без проблем; - в бутлоадре в файле itcm2 прописан адрес хранения бинарника для ARM ядра 40 00 00 (строки 87-89 при открытии в Notepad++). Меняем адрес на тот, что подходит для нашей флэш и не затирает область, хранящую битстрим (для моей 16-Мбит флэш и GW2A-LV18PG256 c максимальным размером битстрима 887 кбайт подошел адрес 0x100000) - и дело в шляпе. Флеш уже едет ко мне, а вот бинарник по Вашему рецепту поправить не удалось. Видимо, с тех пор перекомпилировали его. Что странно, Notepad++ не нашёл даже байта "40"... Изменено 26 июля, 2023 пользователем ppj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tren359 2 26 июля, 2023 Опубликовано 26 июля, 2023 · Жалоба 15 минут назад, ppj сказал: бинарник по Вашему рецепту поправить не удалось. Видимо, с тех пор перекомпилировали его. сравнил файлы Gowin_EMPU_M1_V1.8\bootload\Arora\bootload\ITCM_Size_32KB\.* с теми, которые у меня - отличий не нашёл. Сейчас попробую обновить EDA до актуальной версии и повторить эксперимент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tren359 2 26 июля, 2023 Опубликовано 26 июля, 2023 · Жалоба 1 час назад, ppj сказал: Флеш уже едет ко мне, а вот бинарник по Вашему рецепту поправить не удалось. Видимо, с тех пор перекомпилировали его. Что странно, Notepad++ не нашёл даже байта "40"... у меня есть подозрения, что Вы берете файлы itcm, которые выдает KEIL после сборки проекта (судя по размеру файла на приложенном Вами скриншоте). Вам необходимо взять файлы бутлоадра, поставляемые в архиве Gowin EMPU M1 на сайте. https://www.gowinsemi.com/en/support/database/569/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ppj 0 26 июля, 2023 Опубликовано 26 июля, 2023 · Жалоба 38 minutes ago, tren359 said: у меня есть подозрения, что Вы берете файлы itcm, которые выдает KEIL после сборки проекта (судя по размеру файла на приложенном Вами скриншоте). Вам необходимо взять файлы бутлоадра, поставляемые в архиве Gowin EMPU M1 на сайте. https://www.gowinsemi.com/en/support/database/569/ Точно! Прошу прощения... Старость - не радость. Не в том файле копался. Просто понаделал этих файлов пока разбирался столько, что запутался в них. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ppj 0 26 июля, 2023 Опубликовано 26 июля, 2023 · Жалоба 6 hours ago, tren359 said: Оба направления рабочие: - заменил флэш на 64-Мбит - запустилось все без проблем; - в бутлоадре в файле itcm2 прописан адрес хранения бинарника для ARM ядра 40 00 00 (строки 87-89 при открытии в Notepad++). Меняем адрес на тот, что подходит для нашей флэш и не затирает область, хранящую битстрим (для моей 16-Мбит флэш и GW2A-LV18PG256 c максимальным размером битстрима 887 кбайт подошел адрес 0x100000) - и дело в шляпе. Всё получилось! Переселил C-bin в 0х200000. Лампочка заморгала. Так что совет рабочий. Ещё раз, большое спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться