На фото справа — виновник торжества, микросхема PUYA P25Q80

Китайские поставщики начали использовать микросхему flash-памяти производства PUYA. Это привело к поломке драйверов SPIFFS, которые обычно используюся для сохранения настроек в модулях ESP8266. Пострадали многие проекты. Решения пока нет.


Сегодня утром я начал с рутинной операции по прошиванию очередной партии модулей ввода-вывода IO-Node. Сердцем устройства является модуль ESP-07. Ничего не предвещало беды.

Первый модуль прошился, запустился, пустил в веб-интерфейс. Два релейных выхода и дискретные входа заработали сразу. Однако при попытке поиска подключенных 1-wire датчиков температуры произошло нечто странное. IO-Node отрапортовал о том, что найден один датчик и завис.



Причем он завис так, что даже после перезагрузки не мигал статусный светодиод. Сказать, что я был удивлен, значит ничего не сказать. Перепрошивка тоже не помогла.

Подумав, что попался сбойный модуль ESP-07, я взялся за прошивку следующей платы. Каково же было мое удивление, когда и следующая плата вела себя точно так же. Очевидно, что это не было совпадение.

Начав отлаживать код прошивки, я обнаружил что не работает SPIFFS — драйвер файловой системы, который мы используем для хранения настроек.

Поиск в гугле показал, что это весьма новая проблема, которая появилась буквально в начале января. Обсужения есть тут и тут.

Суть проблемы в том, что китайцы стали применять новую микросхему флеш-памяти PUYA P25Q80 (см. первую фото). Эта микросхема работает не совсем так, как предыдущие микросхемы производства Winbond и прочие.

Что именно происходит еще не до конца понятно. Высказывается мнение, что при попытке записи части блока памяти микросхема переходит в аварийное состояние. В то время, как при записи всего блока сразу она работает корректно.

Кстати, если в SPIFFS поместить данные при первичной прошивке модуля ESP, то данные из него читаются корректно. Ошибки происходят только при записи в память из кода прошивки. Но это критическая проблема, т.к. теперь невозможно сохранения пользовательских настроек.

Что делать?

На текущий момент мы, как и другие пользователи ESP8266, заменяем PUYA на микросхемы производства Winbond. С ними такой проблемы нет. И ожидаем развития ситуации — вдруг появится программный патч. В долгосрочной перспективе мы или выпустим свой модуль или разведем все эти микросхемы на нашей «материнской» плате что бы держать эту ситуацию под контролем.

Неудобно, что при покупке модулей неизвестно что вам продадут — микросхема скрыта под металлическим экраном и визуально недоступна.

Комментарии (56)


  1. avf1906
    02.02.2018 16:35

    У микросхемы есть ID, по которому можно определить тип из прошивки.


    1. kuzmuk Автор
      02.02.2018 16:39

      Из прошивки можно. А как это сделать при покупке?


      1. avf1906
        02.02.2018 17:02

        правильный поставщик решит проблему :) хотя судя по обсуждениям winbond снята с производства и ориентироваться на нее бесполезно. Вообще судя по даташиту даже winbond пишет только страницами по 256 байт и стирает по 4к. Поэтому может выделить под конфиги страницу или сектор и переписывать полностью. А еще посмотреть прошивку которая к радио относитчя, может она занимает больше места и пытаетесь писать поверх нее, если адресация абсолютная. ЗЫ: с ESP не работал, нюансов не знаю, а для флэши вообще чтение ID перед работой с ней — must have.


        1. An_private
          02.02.2018 19:37

          Эээээ. Не понял. Это же eeprom, а не флеш — там нет блоков — запись в произвольное место от одного байта. Последовательная запись блока до 32 байт сделана исключительно для удобства пользователей.


          1. An_private
            02.02.2018 19:44

            А, затупил — это же flash. Просто автор раз 10 повторил, что это eeprom и я некритически это прочитал. Автор — поправь — речь о flash, а не о eeprom.


            1. kuzmuk Автор
              02.02.2018 19:55

              Исправил


        1. huhen
          02.02.2018 20:16

          Winbond позволяет писать от 1 до 256 байт за раз(Program one to 256 bytes).
          Более того, отлично работает запись(сброс нужных бит) поверх без стирания, по крайне мере на W25Q64FV проблем нет.


  1. en1gma
    02.02.2018 17:27

    я правильно понимаю, что весь плач Ярославны заключается в том, что один (из кучи) поставщиков ради снижения цены стал ставить дешевый китайский spi-flash, драйверов для которой (ибо команды записи не совпадают с Winbond) ПОКА нет в esp-sdk от Espressif? и ПОКА НИКТО не написал и апстримил их в esp-sdk.


    1. An_private
      02.02.2018 19:58

      Бегло пробежался по даташиту — вроде все команды совпадают. Скорее всего где-то косячная реализация у китйцев — так бывает. Либо разрабы библиотеки где-то накосячили по принципу «и так работает — сойдёт»


      1. en1gma
        02.02.2018 21:28

        а они сидят на попе ровно и ждут пока кто-то за них всё напишет, чтобы их КОММЕРЧЕСКИЙ дальше продавался?
        щикарно… ардуино головного мозга… «если это никем не написано — значит это невозможно»


        1. olartamonov
          03.02.2018 13:28
          +1

          У нас на одном хакатоне одна команда так датчики выбирала. Взяли у организаторов датчик, скачали либу для ардуины, залили, включили — не работает, выключили, пошли к организаторам просить датчик другой модели…

          Впрочем, это хоть школьники были. Они на выпуск коммерческого продукта не претендовали.


  1. holomen
    02.02.2018 17:42
    +5

    Вы уж простите за занудство. НО. ESP8266 — микросхема. И по-прежнему может писать в _нормальные_ еепром, а не в неведомую поделку которую распаяли в том подвале где вы купили _модули_ на базе ESP8266.
    А то я уж почти испугался.


    1. kotomyava
      02.02.2018 21:47
      +1

      Она и в «не нормальные» умеет писать, не хуже, если поправить драйвера. =)


  1. FGV
    02.02.2018 19:01
    +2

    Новые ревизии ESP8266 не умеют писать в EEPROM

    Пугающий заголовок, но по приведенным линкам пишут что не некорректно работает SPIFFS, под адурино иде...


    1. nochkin
      02.02.2018 20:31

      del


  1. tronix286
    02.02.2018 20:08
    +6

    Андруино головного мозга в полной красе. Шаг в сторону — все. Ну туда вам и дорога, тащемта.


    1. nochkin
      02.02.2018 20:32

      При чём тут Arduino IDE? Речь про саму SPIFFS была. У автора топика проблемы работы с SPIFFS только.
      Похоже на хвосты в самом SDK.


      1. tronix286
        03.02.2018 14:31
        +2

        А ни при чем. Это общая болезнь такая. Некий сферический ПТУ-шник в вакуме смекает, что можно взять этот модуль, соединить тремя проводами к тому модулю, консультнуться с приятелем осилившим таки институт на тему питальника и забацать ПРОДУКТ! При этом как и что там работает — его не касается. Ну и все, бизнес готов, хуяк хуяк и в продакшен.


    1. Palpatin
      05.02.2018 16:19
      +1

      Вы понимаете, что людям нужно с чего-то начинать? Человек взял доступные инструменты и сделал продукт. Главное конечный результат, а не степерь ебли при производстве. Чем больше будет таких «бизнесов» и продуктов, тем быстрее в стране будет развиваться микроэлектроника. Даже если 100 таких стартапов вырастет один хороший производитель — уже круто. Отвратительное комьюнити у микроэлектронщиков. Кто-то пытается сделать рабочий девайс, задаёт вопрос и набегает «илита» с воплями, что микруху в LQFP надо было самому паяльником распаивать или не мужик. Помогайте друг другу, развивайте свою область!


      1. tronix286
        05.02.2018 20:22

        Понимаю. Например, с физики и транзисторов. Лампы ладно, опустим, для простоты (хотя хороший специалист один фиг к ним вернется потом). Постепенно переходя на микросхемы мелкой логики. Ну а потом — как душа ляжет, можно с восьмибиток начать, а можно и сразу ARM-ы. Лучше все-же с какого-нибудь доистора, где самому лапками на SPI дергать надо. Это даст некое прозрение, хотя бы по этому интерфейсу. И, да, LQFP надо самому паяльником паять — тем более, что ничего сложного в этом нет. Я запаяю, например, 100 ватным совковым паяльником ее с огроменным жалом, ваще без проблем. 1 минута максимум. Насчет помощи — вы серьезно? Я понимаю, если бы человек 1 штуку для себя с огорода температуру мерять сделал — да фигли бы и не помочь. А тут вроде как они ЭТО продают. Вы то я смотрю много помогаете, может и нам поможете одну прошивочку для нашего устройства написать? Ну так, по дружески, чиста.


        1. BigBeaver
          05.02.2018 23:34

          100 ватным совковым паяльником ее с огроменным жалом
          Забавно, но мало кто понимает, что это проще, чем «иглой».


        1. kuzmuk Автор
          06.02.2018 01:50

          А тут вроде как они ЭТО продают.

          Да, продаем. Ваше эго взбунтовалось от сего факта? Внутренний перфекционист не может спать спокойно с этой мыслью? Нет проблем — сделайте свое «идеальное устройство» и продавайте вместо нас. Делов-то — рынок рассудит.

          У нас, к сожалению, нет 100-ваттного совкового паяльника. Поэтому мы даже и не пробуем паять им все подряд. Всё стараемся использовать инструменты чуть посвежее да и просто адекватные задачам. Но это не мешает нам решать проблемы клиентов вместо того, что бы меряться своим самомнением с коллегами или конкурентами.

          Наше устройство было создано для решения насущной проблемы — «измерить температуру еще вооон на том столбе в цеху куда провод протянуть ну очень сложно и дорого». И IO-Node ее отлично решает. Альтернатив ему на рынку как не было так и нет. Поэтому сделали свое устройство. Сначала для себя, на макетке. А потом уже оформили в виде готового изделия и стали предлагать клиентам как сопутствующий товар. Они периодически покупают.

          Думаете, главному инженеру пекарни сильно интересно на чем написана прошивка в датчике температуры — на С/Arduino/Ассемблере? Открою секрет: нет. Это интересно только инженерам-занудам, у которых в резюме есть такие слова.

          Клиента интересует непрерывность производственных процессов и поддержка. Устройство должно работать 24/7/365 и без сюрпризов т.к. простои могут стоить чудовищных денег. А готовый модуль там на плате или LQFP напаянный утюгом суровыми русскими мужиками — никого в этом мире не волнует.

          Наш IO-Node работает 24/7/365 с непрерывным аптаймом? Да! Код вылизан, проверен временем и стабилен, обеспечивает непрерывность процессов клиента.

          Само устройство идеально? Нет, конечно. Мы это понимаем. Можно улучшать и переделывать до бесконечности. Но, учитывая узкую его специализацию и небольшие тиражи, смысла в этом не видим — есть чем заниматься помимо этого.


      1. tronix286
        05.02.2018 20:48

        Чем больше будет таких «бизнесов» и продуктов, тем быстрее в стране будет развиваться микроэлектроника.


        Ну это конечно лучше, чем пивас на лавочке глушить, но не многим. Что будет конкретно у нас развиваться? Производство чего? Плат? Ну резонит кое-как клепает не сложные по технормам у нас в стране. А что еще у нас по вашему будет развиваться с таким бизнесом? Пайка модулей на плату? Ну тоже есть конторы, тот же резонит. Паяют худо-бедно. Да и другие тоже паяют. Но они давно платы делают и паяют. Развились уже. Дальше какое развитие с такими продуктами?


      1. holomen
        06.02.2018 11:31

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


        1. areht
          06.02.2018 13:45

          Вы правда думаете, что сможете каждому ардуинщику надавать по рукам?


  1. BurlakovSG
    02.02.2018 20:48

    Не по теме, но можно поинтересоваться что за плата и что делает? :) И что за клемники?


    1. kuzmuk Автор
      02.02.2018 22:59

      Этот модуль собирает показания температур с датчиков 1-Wire (до 32 штук) и отдает их по Modbus TCP в нашу SCADA. Еще там есть 2 входа и 2 выхода на случай если нужно чем-то поуправлять. Мы его сделали для решения задач сбора температуры в местах, куда кабель тянуть сложно или дорого. Во всяких цехах, магазинах и пр.


    1. olartamonov
      03.02.2018 13:36

      И что за клемники?


      клеммник.рф/pcb_spring/991


      1. av0000
        05.02.2018 09:33

        Я такие лет 5 назад на али брал "мешком". Звались DIERAN DA250
        С одной стороны — удобно, можно набрать гребёнку на нужную длину _для_домашнихподелок. С другой — очень надо внимательно плату разводить — выводы в шахматном порядке и можно "промазать"



  1. CodeRush
    03.02.2018 00:15

    За информацию спасибо, конечно, только заголовок надо исправить на «драйвер SPIFFS не совместим с чипами PUYA P25Qxxxx, обстоятельства выясняются», а то сейчас он читается так: «в новых ревизиях чипа ESP8266 найден баг, из за которого он перестал писать вообще на любые SPI flash», что, понятно, ложь и провокация.


  1. olartamonov
    03.02.2018 13:34
    +3

    Я, наверное, что-то не понимаю в промышленной автоматизации.

    У вас есть на руках проблемное устройство. Вы знаете, на работе с чем оно ломается. Вы можете ткнуться в него логическим анализатором. У вас есть исходные коды этого вашего SPIFFS.

    И вам на поиск и исправление бага серьёзно надо больше времени, чем на плач в интернете и ручную перестановку микросхем? Больше пары часов?

    Вы там стартаперы все что ли, пока смузи не подвезли — работа встала?


    1. tronix286
      03.02.2018 14:26

      Самое непонятное, как они сумели плату развести? И второй момент — кто это покупает по такой цене? Или это 5 устройств в год? Ну тогда еще хоть как-то понятно.


      1. BigBeaver
        03.02.2018 15:09

        А че там разводить-то?


        1. olartamonov
          03.02.2018 15:18
          +1

          Ну там 230 В есть, я таааакие забавные варианты видел с этим напряжением. В руки, правда, брать бы не стал. Особенно во включённом состоянии.

          Но в принципе в то, что развели и не сильно налажали, я даже верю.

          Я искренне не понимаю, как в компании, занимающейся программно-аппаратными решениями, нет людей, минимально способных к отладке типовых программно-аппаратных проблем.

          А если б у них флэшек для перепайки не было бы — то что тогда, они бы контору свою закрыли до тех пор, пока кто-нибудь библиотечку не поправит?


          1. BigBeaver
            03.02.2018 16:28

            Так там монолитный питальник воткнут и все. То есть, все требования по высоковольтной части сводятся к правильным зазорам.


            1. olartamonov
              03.02.2018 16:32

              Ну, платы, в которых прорези в печатке были сделаны между двумя проводниками сети и отсутствовали между первичкой и вторичкой, я видел неоднократно!


              1. BigBeaver
                03.02.2018 16:39

                Думаю, можно просто взять референсный дизайн для используемого модуля и не задумываться особо. Тк нет цели сделать суперплотный монтаж или выжать максимум, должно нормально работать.


                1. olartamonov
                  03.02.2018 17:28
                  +1

                  Хосспади, вы даташит к тому Хайлинку видели? Нет? А знаете, почему? Потому что его нет. Это ж китаец 100-процентный, всё, что вы на него найдёте — это одна страничка на ломаном английском на www.hlktech.net/product_detail.php?ProId=54

                  При этом я на фотке платы что-то не вижу, например, предохранителя и варистора.


                  1. BigBeaver
                    03.02.2018 17:34
                    +1

                    Не, не видел. Ну и я в принципе стараюсь не использовать вещи без норм документации. Впрочем, у меня вообще щас ничего с сетевым напряжением нет, так что особо и не интересуюсь даже.


    1. kuzmuk Автор
      03.02.2018 16:29

      А сколько вам нужно времени что бы вникнуть в реализацию чужого драйвера, исправить его и быть уверенным что ничего больше не поломается, память не потечет, не будет спонтанных косяков в других местах и на других микросхемах?

      Успеете к вечеру все сделать и отгрузить устройства клиентам, которым, как обычно, все нужно на вчера? Прекрасно! Давайте мы вам оплатим эти два часа и вы зальете фикс в апстрим, а?


      1. olartamonov
        03.02.2018 16:38
        +1

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

        Кстати, на заглавной фотографии это чудо с соплями припоя на ногах флэшки и свороченной пассивкой слева от чипа — это ваша работа?

        Давайте мы вам оплатим эти два часа и вы зальете фикс в апстрим, а?


        С удовольствием. $1k, плюс плату, подверженную проблеме, высылаете курьером на адрес моего офиса.


        1. kuzmuk Автор
          03.02.2018 17:03

          С удовольствием. $1k, плюс плату, подверженную проблеме, высылаете курьером на адрес моего офиса.

          $500/час? Спасибо, поулыбался. Ха-ха.

          Вне всякого сомнения, ваши клиенты будут намного более счастливы, узнав, что вы используете чужой код, в реализацию которого вы даже не пытаетесь вникать...

          А не вы ли, часом, ART-блок для своего Black Swift копировали из роутеров TP-Link вместо полноценной калибровки радиотракта каждого модуля?


          1. olartamonov
            03.02.2018 17:15
            +2

            $500/час? Спасибо, поулыбался. Ха-ха.


            (пожав плечами) Вы так пишете, как будто это моя проблема, а не ваша. Ну, перепаивайте чипы дальше.

            А так-то понятно, что мой час — сильно дороже вашего. Было бы наоборот — у вас бы ваши устройства работали.

            А не вы ли, часом, ART-блок для своего Black Swift копировали из роутеров TP-Link вместо полноценной калибровки радиотракта каждого модуля?


            Не-а. Black Swift вообще не был моим проектом, я только забрал его команду и закрыл его долги.

            Но если вам плохая калибровка Wi-Fi в компьютере, последний экземпляр которого был выпущен три года назад, скрасит жизнь, подпорченную вашей клинической неспособностью понять, почему не работает ваш текущий продукт — ну, я только рад буду. Мне всё равно, а вам приятно.

            P.S. А как вы убеждаетесь, что в коде, который вы до сих пор использовали, «ничего больше не поломается, память не потечет, не будет спонтанных косяков в других местах и на других микросхемах», если вы в его реализацию никогда не вникали?


            1. areht
              03.02.2018 22:41

              Чисто из любопытства, а у вас все сотрудники по $500 в час получают, или только вы способны эту проблему решить?


              1. olartamonov
                03.02.2018 23:17
                +1

                А ваш работодатель вам отдаёт всю выручку с проектов, которые вы для него делаете? Или он, может быть, заказчикам стоимость проектов сразу по себестоимости вашего времени выставляет?

                Эта услуга стоит $1000. Не надо — ну значит не надо, я уговаривать не буду.


                1. areht
                  04.02.2018 00:06

                  /вспоминая ваши вакансии/ мне работодатель отдаёт куда больше 1%.

                  Впрочем, у меня вопрос не по цене услуги (она вполне адекватная), но 2чч — несерьёзно.


                  1. olartamonov
                    04.02.2018 00:08

                    (пожав плечами) По моему лицу разве похоже, будто меня интересует, что с вашей точки зрения серьёзно, а что нет?


                    1. areht
                      04.02.2018 01:18

                      Да ладно уж обижаться сразу, ну подумаешь пошутили вы про 2 часа.

                      Кстати, а сколько флешек вы перепаять готовы за $1000?


                      1. olartamonov
                        04.02.2018 01:30

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

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

                        А флэшек я готов перепаять ровно ноль, у меня поинтереснее в жизни занятия есть. Так что если что — не стесняйтесь, договаривайтесь о своих услугах с автором поста напрямую.


                        1. areht
                          04.02.2018 02:22
                          +1

                          А после отладки, очевидно, остается только «пофиксить баги и задеплоить»©

                          Ох, сколько раз я слышал «да я бы это сделал за 2 часа, только я слишком занят и у вас на меня денег не хватит»


                          1. holomen
                            04.02.2018 08:28

                            На самом деле в той фразе пропущена небольшая часть:
                            «да я бы это сделал за 2 часа, только я слишком занят и мне это не нужно и неинтересно, поэтому у вас на меня денег не хватит


                            1. areht
                              04.02.2018 09:39

                              Это не меняет эмпирического факта, что за 2 часа это не сделается.


                              1. tronix286
                                04.02.2018 15:37
                                +1

                                Конечно. Это нужно спецом время тянуть — кофейку попить, с девченками из бухгалтерии перетереть, сходить на стоянку с машины снег почистить, в туалете посидеть в баш позалипать, еще что-то придумать… Но до двух часов дотянуть все-таки можно. При должной сноровке можно и на 3 растянуть.


                      1. nochkin
                        04.02.2018 05:58

                        Из этой вашей непонятной перепалки видно, что olartamonov про два часа ничего не говорил. Он только назвал фиксированную цену за предполагаемый софтовый фикс.
                        Кстати, цена вполне нормальная. Я бы больше взял.


  1. Farmatique
    03.02.2018 16:30

    Из заголовка совершенно ничего не понял. но перешел по ссылке в одном из комментариев, чтоб узнать о чем вообще речь. Посмотрел, проникся, увидел что ребята из Днепра, а стало быть земляки. Приятно.
    П.С. Если что, извиняюсь за оффтоп