SPI для flash для других устройств

Можно ли использовать SPI на котором весит flash память для других устройств одновременно? можно ли использовать GPIO9 GPIO10(они тоже идут на флешку) Имеится модуль esp12e и на нём распаяны SPI и GPIO9 GPIO10 вот не знаю можно ли использовать для своих нужд или нет или есть ограничения какие то?
 

pvvx

Активный участник сообщества
Можно ли использовать SPI на котором весит flash память для других устройств одновременно? можно ли использовать GPIO9 GPIO10(они тоже идут на флешку) Имеится модуль esp12e и на нём распаяны SPI и GPIO9 GPIO10 вот не знаю можно ли использовать для своих нужд или нет или есть ограничения какие то?
Практически нет, т.к. это достаточно сложно и нет соответствующей программной и аппаратной поддержки.
Flash всегда читается, т.к. программа из неё 'кэшируется' для CPU. Необходимо распределить процесс 'кеширования' и обращений по пинам QSPI, что не всегда возможно.
По тому модуль ESP-12E с выводом шины flash никчемная затея, кроме случаев полного перевода работы шины на SD карту с загрузкой программ в IRAM с неё или включения дополнительной Flash как банка данных. Но вариант с доп. Flash тоже бредовый - замена единственной flash на модуле на 16 Мегабайтную хватает для всего и является самым прямым решением, не вызывающим дополнительного потребления из-за увеличения нагрузки на шину QSPI работающую на 80 MHz.
Подключение SD карты возможно и по другой шине HSPI.
Как итог - выводы сделанные на ESP-12E кроме доп. глюков и нагрузки на шину ведущую к увеличению потребления модулем ничего не дают, а разрабатывать свой модуль с чипом esp8266ex вы не будете. :)
Обратится к QSPI возможно только из кода находящегося в IRAM c одновременным отключением аппарата 'кеширования' Flash ( т.е. код и данные из Flash в этот момент для CPU недоступны). Другие варианты не пойдут.
Модуль ESP-12E требуется только для специальных тестов, а для простого пользователя выбор его неверен. ESP-12 без E - самый верный вариант для простого пользователя, но в них не хватает вывода питания RTC. Лучше бы вывели его, а не шину Flash. Но пользователь ныне безграмотный и выбирает вариант где больше фиктивных галочек, чем и пользуются китайцы :)
 
Последнее редактирование:

wbeam

New member
выводы сделанные на ESP-12E кроме доп. глюков и нагрузки на шину ведущую к увеличению потребления модулем ничего не дают
Выводы флэшки потребляют 20мкА если не будет включен её cs, откуда будут глюки? нагрузка же минимальная. Нормальный это вариант для доп. флэш банка памяти, имхо.
 

sharikov

Active member
Выводы флэшки потребляют 20мкА если не будет включен её cs, откуда будут глюки? нагрузка же минимальная. Нормальный это вариант для доп. флэш банка памяти, имхо.
флэшка непрерывно работает на частоте 80Mhz
Примем емкость вывода с разводкой 7pf. Считаем динамическое потребление:
1/(2*pi*80e+06*7e-12) = 284.205
задействовано 5 выводов (4 данных + клок)
284/5 = 56,8
I=3.3/56.8 = 58мА
 

wbeam

New member
Процессор обслуживает на шине один слэйв, который например подключён к cs0, при этом слэйвы на cs1(cs2) потребляют примерно 20мкА. Выставлять все сигналы cs одновременно нельзя, так? А без активного cs флэшка держит свои выводы в высокоимпедансном состоянии и не мешает обмену по шине. В чём проблема-то?
 

pvvx

Активный участник сообщества
Процессор обслуживает на шине один слэйв, который например подключён к cs0, при этом слэйвы на cs1(cs2) потребляют примерно 20мкА. Выставлять все сигналы cs одновременно нельзя, так? А без активного cs флэшка держит свои выводы в высокоимпедансном состоянии и не мешает обмену по шине. В чём проблема-то?
В емкости этих выводов и проводников к ним. Каждая дополнительная микросхема на CLK и шине данных увеличивает потребление. Смотрите пост выше и для точности измерьте тестером.
 

wbeam

New member
Как только будет возможность, проверю. Но потребление 50 мА в высокоимпедансном состоянии... как-бы это... очень сильно сомнительно.
 

pvvx

Активный участник сообщества
Но потребление 50 мА в высокоимпедансном состоянии... как-бы это... очень сильно сомнительно.
А 80 МГц меандр с фронтами в сотни пикосекунд 3.3В тоже сомнительно? :)
Емкость проводника + входного/выходного транзистора в микросхеме тоже сомнительно?
Гораздо хуже ещё, когда просто ненагруженный на конце проводник и с него прет отражение сигнала...
 

wbeam

New member
<-здесь на вашей картинке фронт примерно 10нс и это только на клоке, чем вы разглядываете пикосекунды я не могу представить... гигагерцовых осциллографов не имею, к сожалению. Учитывая скважность данных динамическое потребление должно быть намного меньше приведённого выше расчётного. Скажем в 5 мА для дополнительно подключенной флэшки я ещё поверю, но в 50 - извините, нет. Но тест конечно проведу когда будет возможность. И ещё, не подумайте что я придираюсь к расчётам, просто из практики, до 1ГГц платы с длиной дорожки менее 3см не создадут помех сигналам. Вот если флэшку вынести дальше, тогда конечно. (хочу себе платку сделать вместо китайской, поэтому и интересуюсь подробностями)
 

pvvx

Активный участник сообщества
Скажем в 5 мА для дополнительно подключенной флэшки я ещё поверю, но в 50 - извините, нет.
А читать умеете?
Выше указано для чего делал чел расчет: непрерывно работает + 7 пФ на провод + все данные типа 0x55555555 или 0xAAAAAAA.
Затем читаете, что подписано к осцилле:
Видим, что CLK идет на ~40MHz, как я и установил в загрузчике.
Далее смотрите фронт и рассчитываете его длину. (На осциллограмме фронт не приведен по причине, что измерение сделано не согласованными щупами, а просто воткнутым кое-как, да простым пассивным щупом имеющим емкость за 12 пФ)
Или у вас цифровой сигнал CLK идет синусом? :) При 80 МГц у нас уровень нуля должен быть 6.25 нс и уровень “единицы” 6.25 нс. Для такого сигнала считаете, что достаточно иметь выходы с более 1 нс фронтами? -> выходы будут рассчитаны на сотни пикосекундные фронты. Измеряйте фронты и далее уже считайте по спектральной плотности, а не по синусу 80 МГц :) В итоге проводники у вас должны проводить без сильных затуханий хотя-бы 3-ю нечетную гармонику...
Даташит W25Q128FV и подобных Flash:
Input Capacitance CIN 6 pF
Output Capacitance Cout 8 pF
 
Последнее редактирование:

sharikov

Active member
Как только будет возможность, проверю. Но потребление 50 мА в высокоимпедансном состоянии... как-бы это... очень сильно сомнительно.
Может и больше расчета получиться. Не учтено потребление дополнительного чипа.
Если чип медленный скажем Fmax=10МГц например как микрочиповская spi ram подача 80МГц на вход будет равносильна подаче 1/2 питания. Вспоминаем как кмоп микросхемы себя ведут при входных уровнях между Vlo и Vhi.
 

pvvx

Активный участник сообщества
Может и больше расчета получиться. Не учтено потребление дополнительного чипа.
Если чип медленный скажем Fmax=10МГц например как микрочиповская spi ram подача 80МГц на вход будет равносильна подаче 1/2 питания. Вспоминаем как кмоп микросхемы себя ведут при входных уровнях между Vlo и Vhi.
Espressif не дал характеристик выходов rise/fall time. Но повышение тока потребления при замкунтом выходе и выводе значения для КЗ я измерял: "Закорачивание I/O выхода вызывает увеличение тока на 50 мА: http://esp8266.ru/forum/attachments/esp-01-gpio15-out-gif.885/"
У flash, т.к. они КМОП в даташите значится, что минимальный rise/fall time до 0.2 нс. Менее наверно заглючит - прошибет по внутренним емкостям, наверно надо резисторы на линиях... Но емкость входа flash всё равно большая и может и не надо...
Но вот резонансный контур делать из проводника от чипа до чипа, как это сделано на многих макетках - явно не стоит :)
просто из практики, до 1ГГц платы с длиной дорожки менее 3см не создадут помех сигналам.
Очень хороший контур на одну из первых гармоник 80 МГц c учетом емкости входа Flash :)
ESP8266 при выводе ШИМ на ножку от встроенного аппаратного sigma-delta и наличии проводника к 3 см сам себе глушит прием WiFi :p Всё как пишите - сигналы то до 1 ГГц, но без терминаторов :) :)
Т.е. в итоге от разводки QSPI на плате у вас будет ещё зависеть уровень минимального приема (соотношение сигнал/шум - важный критерий для WiFi).
PS: Итого давно описано - на каждый пин ESP8266 сразу у него резистор последовательно и далее проводник за пределы экрана. Flash - одна и сразу к чипу, желательно вплотную, с длиной от пина до пина только малый SMD резистор на десятку Ом. Другой вариант - многослойка с экранными слоями и между ними проводники к Flash, чтобы вообще не вылезали на внешние слои. Откройте любой WiFi роутер и посмотрите - где сигналы более 50 MHz и малослока плата, то обязательно стоят резисторы последовательно на прводниках, чтобы глушить и резонанс, и пики тока от фронтов, и для согласования и ...
 
Последнее редактирование:

wbeam

New member
Если чип медленный скажем Fmax=10МГц например как микрочиповская spi ram подача 80МГц на вход будет равносильна подаче 1/2 питания. Вспоминаем как кмоп микросхемы себя ведут при входных уровнях между Vlo и Vhi.
Неспортивные варианты не рассматриваем, память от 80МГц и выше.
 

wbeam

New member
Далее смотрите фронт и рассчитываете его длину. (На осциллограмме фронт не приведен по причине, что измерение сделано не согласованными щупами, а просто воткнутым кое-как, да простым пассивным щупом имеющим емкость за 12 пФ)
Или у вас цифровой сигнал CLK идет синусом? :) При 80 МГц у нас уровень нуля должен быть 6.25 нс и уровень “единицы” 6.25 нс. Для такого сигнала считаете, что достаточно иметь выходы с более 1 нс фронтами? -> выходы будут рассчитаны на сотни пикосекундные фронты. Измеряйте фронты и далее уже считайте по спектральной плотности, а не по синусу 80 МГц :) В итоге проводники у вас должны проводить без сильных затуханий хотя-бы 3-ю нечетную гармонику...
Это из серии один пишем - два в уме. Вы же не видите на осциллографе сигналов, а выводы делаете. Хотя всё выглядит логично, не спорю. Но все рассуждения о прохождении сигнала с частотой выше 1 ГГц напоминают религиозные споры ))) Надо смотреть конкретную топологию, конкретные чипы и курить даташиты.
 

wbeam

New member
Но вот резонансный контур делать из проводника от чипа до чипа, как это сделано на многих макетках - явно не стоит
Это одна из причин, по которой и хочется свою плату )))

ESP8266 при выводе ШИМ на ножку от встроенного аппаратного sigma-delta и наличии проводника к 3 см сам себе глушит прием WiFi :p Всё как пишите - сигналы то до 1 ГГц, но без терминаторов :) :)
Если оставить в наружном слое, то да. Но в нормальной топологии этого не будет.

PS: Итого давно описано - на каждый пин ESP8266 сразу у него резистор последовательно и далее проводник за пределы экрана.
Ну да, но это уже будет забота разработчика топологии следующего уровня. В моей плате эти линии будут под экраном, поэтому последовательные резисторы не будут установлены.

Flash - одна и сразу к чипу, желательно вплотную, с длиной от пина до пина только малый SMD резистор на десятку Ом.
Та что на плате - будет одна, а вторую можно будет установить на топологии следующего уровня, там же надо предусматривать последовательные резисторы. Это на случай, когда потребление будет уже не критично и будет нужна дополнительная память. Кстати, я рассматриваю вариант минимизации размеров и цены, в результате оптимальная ёмкость получается 2Mbit. Что скажете - можно туда упихать разумный минимум функциональности или нет? (я читал, что вы говорили про 16 MBit, но в малом корпусе они слишком дорогие)

Другой вариант - многослойка с экранными слоями и между ними проводники к Flash, чтобы вообще не вылезали на внешние слои. Откройте любой WiFi роутер и посмотрите - где сигналы более 50 MHz и малослока плата, то обязательно стоят резисторы последовательно на прводниках, чтобы глушить и резонанс, и пики тока от фронтов, и для согласования и ...
Поделки нафиг-нафиг. От 4 до 8 слоёв.
 

pvvx

Активный участник сообщества
Надо смотреть конкретную топологию, конкретные чипы и курить даташиты.
А на ESP8266 даташита нет. Всё что известно то снято руками и вывод один - сильное повышение потребления и подведенного шума к приемнику при 2-х flash или если разводка проводников шины QSPI сделана во вне :p
 

wbeam

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

pvvx

Активный участник сообщества
А вы можете разделить причины этого повышения?
Повышения чего и как?
Например загрузить прошивку без WiFi и проверить потребление только со второй флешкой? Сразу было бы понятно где мухи а где котлеты.
Пробовал ещё проще - с Winbond flash на 16 Mbytes и со стандартной GD на 512 kbytes - разница потребления до 10 mA, на GD в плюс. И скорость записи у GD почти в 10 раз меньше...
 
Последнее редактирование:

wbeam

New member
вывод один - сильное повышение потребления и подведенного шума к приемнику при 2-х flash или если разводка проводников шины QSPI сделана во вне :p
Причина повышения может быть как в увеличении ёмкости линий, так и в увеличению помех для WiFi, поэтому если включить чип без WiFi, то останется только повышение, обусловленное второй флешкой. Проведите такой тест, если вам не трудно.

с Winbond flash на 16 Mbytes и со стандартной GD на 512 kbytes - разница потребления до 10 mA, на GD в плюс. И скорость записи у GD почти в 10 раз меньше...
Более скоростная память при прочих равных условиях имеет выводы с меньшей ёмкостью, в этом случае вопросов не возникает.
 

pvvx

Активный участник сообщества
Причина повышения может быть как в увеличении ёмкости линий, так и в увеличению помех для WiFi, поэтому если включить чип без WiFi, то останется только повышение, обусловленное второй флешкой. Проведите такой тест, если вам не трудно.
Трудно. Т.к. надо перепаивать flash на модуле для правильного сравнения. А это лениво. Один раз сравнил и больше не хочу. Другие сравнения делались с модулями, на которых перепаял flash, но не измерял до того, со старой. Показания на них примерно сходятся.
Более скоростная память при прочих равных условиях имеет выводы с меньшей ёмкостью, в этом случае вопросов не возникает.
Не только. У Winbond есть аппратная поддержка блочного "кэширования", которая используется в чипе ESP8266. Так-же у неё быстрее отклик при запросе. Например можно укоротить таймаут CS (SPI0_USER |= SPI_CS_SETUP; // +1 такт перед CS - стоит для GD flash) и т.д....
Когда измерял производительность, а это уже было давно, то с Winbond на 16 мегабайт чип работает быстрее. Но тогда не уточнил причину.
Существуют различия в командах: Set Burst with Wrap 0x77 влияющая на Word Read Quad I/O 0xE7, Octal Word Read Quad I/O 0xE3. У Octal Word Read Quad нет Dummy цикла. Этого нет в GD flash.
По тому вот так просто взять и сравнить точно разницу потребления не представляется возможным. К примеру с одной flash проц успеет 100 циклов накрутить, с другой 10 до прерывания и типа.
Да и для второй flash придется использовать второй CS, а пинов i/o у чипа и так мало.
 
Последнее редактирование:
Сверху Снизу