Время работы программы во Flash и EEPROM

cryptozoy

Member
Может всё-таки задействовать контроллер ПДП для буферизации приёма и передачи по UART, а не продолжать заниматься ерундой?
 

Евгений

New member
Какая маркировка у используемой Вами флешки?
W25q64jvssiq

С DMA все было бы хорошо если бы пакеты были одной длины или хотя было бы прерывание на работу DMA. А так снова велосипед придется делать. А если в программе будет задержка в обработке кода и в это время придет очередной пакет - он затрет или испортит текущие данные в буфере DMA. На таймер обработку если только вешать.


Я был не прав - прерывание на ДМА есть (EPIC_CHECK_DMA())
 
Последнее редактирование:

cryptozoy

Member
W25Q64JV режим QPI не поддерживает, а в QSPI режиме (команда чтения 0xEB) InterimLength = 3. Хотите быстрее (QPI с InterimLength = 1), меняйте версию JV на FV, то есть на серии W25Q32FV, W25Q64FV, W25Q128FV, W25Q256FV. Из самых быстрых они самые недорогие.
 

ejsanyo

Active member
И как быть теперь с теми же прерываниями и потоковой передачей данных при работе из флеша?
Щас вот баловался с прерываниями и кольцевыми буферами для UART, и вот вам ещё такой совет из разряда "сумеречной индусской магии". 🧞‍♂️
У вас цикл while (1) пустой без ничего? И вообще, есть такие моменты, где код топчется на месте? Попробуйте-ка разбавить эти места...холостыми командами! Вот пример чтобы было понятнее:
C:
#define __NOP() __asm volatile ("ADDI x0, x0, 0") //такой костыль, ибо в RISC-V нет родной команды nop!

while (rx_counter == 0) ; //не очень стабильно, особенно когда включаешь оптимизацию в компиляторе

while (rx_counter == 0) __NOP(); //как ни странно, намного лучше!
Я с такими странностями сталкивался ещё на чипах от GigaDevice. Там тоже разбавить код nop-ами помогало заставить работать его стабильнее. А ведь у ГигаДевайса тоже фишка в том, что флешка не интегрирована в кристалл, а нахлобучена поверх отдельным чипом. совпадение? Не думаю!
 

mscs

Member
Если я правильно понимаю, в МК производства GigaDevice код из Flash-памяти (отдельный кристалл) при запуске автоматически копируется в "теневое" ОЗУ и уже оттуда выполняется, как и в МК производства Nanjing Qinheng Microelectronics (WCH).
 

ejsanyo

Active member
Если я правильно понимаю, в МК производства GigaDevice код из Flash-памяти (отдельный кристалл) при запуске автоматически копируется в "теневое" ОЗУ и уже оттуда выполняется, как и в МК производства Nanjing Qinheng Microelectronics (WCH).
У WCH, насколько знаю, память сделана более-менее по классике. А вот у GigaDevice всё сложно, и, скорее всего, флешка внутри тоже подключается через SPI.
 

Евгений

New member
Щас вот баловался с прерываниями и кольцевыми буферами для UART, и вот вам ещё такой совет из разряда "сумеречной индусской магии". 🧞‍♂️
У вас цикл while (1) пустой без ничего? И вообще, есть такие моменты, где код топчется на месте? Попробуйте-ка разбавить эти места...холостыми командами! Вот пример чтобы было понятнее:
C:
#define __NOP() __asm volatile ("ADDI x0, x0, 0") //такой костыль, ибо в RISC-V нет родной команды nop!

while (rx_counter == 0) ; //не очень стабильно, особенно когда включаешь оптимизацию в компиляторе

while (rx_counter == 0) __NOP(); //как ни странно, намного лучше!
Я с такими странностями сталкивался ещё на чипах от GigaDevice. Там тоже разбавить код nop-ами помогало заставить работать его стабильнее. А ведь у ГигаДевайса тоже фишка в том, что флешка не интегрирована в кристалл, а нахлобучена поверх отдельным чипом. совпадение? Не думаю!
Не там математика просчитывается - интерпритатор плк программы. Я почему флеш и использую - EEPROM очень маленькая, в нее что то нормальное не впихнешь. Сейчас моя программа весит около 60кб (там и графический редактор программ и интерпритатор). По уарту (для экономии ног их там задействовано 13) у меня цепляется дисплей (на базе ардуины) на котором рисуется вся графика плюс обрабатывается татч. Но походу придется дисплей цеплять напрямую к пинам Амура.

Вопрос к знающим не по теме топика - а у Амура пины толлерантны к 5 вольтам, если да то какие ? В даташите я ничего на эту тему не нашел.
 

ejsanyo

Active member
Вопрос к знающим не по теме топика - а у Амура пины толлерантны к 5 вольтам, если да то какие ? В даташите я ничего на эту тему не нашел.
Я тоже ничего не нашёл, а посему решил не рисковать и запихнул в свою поделку преобразователи уровня. Вероятно, буду делать так и далее, это не сильно дорого, но снимает массу вопросов.
 
Последнее редактирование:

ejsanyo

Active member
Вот вам например, пример. С которым я вчера развлекался на своём изделии. Код, наверно, кривой, но как я не старался бомбить данными, ни единого разрыва замечено не было. Может, конечно, у компа в этом плане ограниченные возможности?
Работа с буферами, по сути, срисована с кода, который генерит мастер CodeVisionAVR. 😗 Но я его в своих поделках часто использую в той или иной вариации. Обратите внимание, как мы запрещаем прерывания в моменты чтения/записи буферов, это важно.
Ещё данный пример немножко демонстрирует работу с таймерами.
 

mscs

Member
у Амура пины толлерантны к 5 вольтам, если да то какие ?
Согласно техническим условиям АДКБ.431290.418ТУ, нет.
Входное напряжение высокого уровня для многофункционального вывода в цифровом режиме, В:
предельно допустимый режим - Ucc; предельный режим - Ucc + 0,3.
 

Евгений

New member
Согласно техническим условиям АДКБ.431290.418ТУ, нет.
Входное напряжение высокого уровня для многофункционального вывода в цифровом режиме, В:
предельно допустимый режим - Ucc; предельный режим - Ucc + 0,3.
Спасибо за ответ, хорошо что я не подключил свой 5-ти вольтовый дисплей к нему - было бы не приятно получить кирпичик.
 

ejsanyo

Active member
хорошо что я не подключил свой 5-ти вольтовый дисплей к нему - было бы не приятно получить кирпичик.
Думаю, у вас бы при этом ничего не сгорело, ведь выходы у дисплея наверняка имеют ограничение выходного тока. С другой стороны, даже если у контроллера ноги НЕ толерантны к 5В, то на них, по крайней мере, есть защитные диоды, сбрасывающие избыток напряжения на входах в шину питания. И даже, не исключено, что всё бы заработало! Как минимум, потому, что у многих чипов даже с 5В питанием по входу порог уровня единицы ниже 3,3В. Но даже если для вашего дисплея входные уровни единицы как бы считаются не ниже Uпит * 0,7, то бывает, что в жизни они ниже! Хотя, конечно, сильно рассчитывать на такое везение не стоит.
 
Сверху