Большинство современных CPU позволяют производить начальную загрузку с разных источников (media booting), одним из которых может быть SPI NOR Flash. Микросхемы энергонезависимой памяти NOR Flash с последовательным интерфейсом SPI используются на материнских платах для хранения образов BIOS, BMC, а так же данных различного назначения. Если же речь идет о популярных платах, постороенных на различных SoCs, таких как Raspberry Pi, Orange Pi и так далее, то на них SPI-интерфейс может быть выведен на контактые площадки для того, чтобы пользователь мог самостоятельно подключить ту или иную микросхему в качестве внешнего носителя.


Для разработки и отладки, как самих устройств, так и програмного обеспечения, возникает необходимость макетирования, то есть создания макетной платы, на которой распаяна микросхема SPI NOR Flash, служащая для подключения к основной плате устройства.


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


На следующем рисунке показан пример подобной макетной платы.





Здесь распаяно два разъема: один для подключения программатора, например, CH341A, другой для подключения к основному устройству.


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


Наилучшим решением в таких случаях является создание макетной платы, на которой уже распаяны все пассивные элементы и имеется контактная площадка для напайки NOR Flash в различных исполнениях (SOP-16, SOP-8, 8-pad WSON 8x6-mm, 16-pin SOIC 300-mil).


Если распаять все пассивные элементы и разъемы, то пользователю останется только монтажная площадка для выбранной им микросхемы, монтаж которой будет удобен даже без использования дорогостоящей паяльной станции.





Электрическая принципиальная схема макетной платы показана на следующем рисунке.





Плата расчитана на NOR Flash c питающим напряжением 3.3V и пригодна для работы с таким микросхемами, как Winbond W25Q256JV, Infinion S25FL512S и т.д. и т.п.


Разъем J1 предназначен для подключения программатора. В случае использования программатора CH341A, достаточно использовать обычный шлейф (Flat Ribbon Cable) 1.27mm и два разъема IDC (2X4 8 Pins 2.54mm Dual Row Socket), как показано на следующем рисунке.





Разъем J2 предназначен для подключения к устройству, в качестве которого может выступать одноплатный компьютер.


Для примера, рассмотрим подключение микросхемы Winbond W25Q256JVFIQ к одноплатной машине Lenovo Leez P710. На плате имеется 40-контактный блок, где SPI-интерфейс выведен на контакты 19, 21, 23, 24.





Следующая таблица показывает схему подключения контактов разъема J2 макетной платы к контактам Leez P710.





Для того, чтобы ядро Linux могло определить подключеную таким образом микросхему, необходимо добавить в описание dts (arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts) следующие строки.


&spi1 {
    status = "okay";

    spiflash: flash@0 {
        compatible = "winbond,w25q256", "jedec,spi-nor";
        reg = <0>;
        spi-max-frequency = <1000000>; // 1MHz

        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            spi-flash@0 {
                reg = <0x0 0x2000000>; // 32MiB (Full flash)
                label = "spi-flash";
            };
        };
    };
};

Здесь определен только один раздел, занимающий весь объем памяти, которому будет соответствовать устройство /dev/mtd0. Разумеется, в разделе partitions можно определить и другие разделы. Следует только помнить, что выравнивания и размеры разделов NOR Flash должны быть кратны размеру Erase Block.




Оригинал статьи можно найти в блоге Radix cross Linux.

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


  1. dlinyj
    12.09.2022 15:27
    -1

    Я уж думал, что SPI NOR Flash — это рудимент, который канул в лету. Ан нет, всё ещё используют. А какой практический толк в использовании этого мамонта?


    1. rcl Автор
      12.09.2022 15:37

      Ну что Вы, еще как используется. Например вы можете на ARM-борде использовать в качестве загрузчика EDK II, записав его в SPI флешку. Тогда вы будете иметь возможность загружаться с дисков GPT/UEFI. Как, например, Baikal M1000.

      Да и нельзя забывать про BIOS и BMC.


      1. dlinyj
        12.09.2022 15:49
        -1

        Просто на смену ему пришла eMMC, которая не имеет тех проблем, которая имеет NOR Flash. Там надо ФС иметь соответствующие, типа jffs2, и прочие грабли и гемморои. Вспомнить ещё всякие области расширения. В общем, я не вижу смысла в её использовании.

        Я про загрузчик, который вы описываете, ничего не знаю. Знаю u-boot, но что мешает спроектировать схемотехнику так, чтобы использовать eMMC?


        1. rcl Автор
          12.09.2022 15:56
          +1

          eMMC лучше использовать как системный диск, ведь eMMC теперь впаивают большого объема. И при наличии EDK в SPI, еММС станет для пользователя обычным диском, как HDD на его лаптопе, куда он может инсталлировать OS (и ему не надо будет думать о Flash Layout и по каким адресам писать u-boot).


          1. dlinyj
            12.09.2022 16:02
            -1

            А какая религия мешает всё разместить на одной микросхеме? Просто я пока не понимаю преимуществ NOR Flash, кроме явных недостатков.


            1. maquefel
              12.09.2022 16:25
              +1

              Вот неплохая обзорная статья по верхам:

              https://embeddedcomputing.com/technology/storage/a-comparison-of-flash-devices-for-embedded-system-booting

              Просто я пока не понимаю преимуществ NOR Flash, кроме явных недостатков.

              • EOL (цикл жизни)

              • SPI NOR может быть реально быстрее eMMC

              • Как я уже говорил XIP

              • Сильно проще разводка на плате


              1. dlinyj
                12.09.2022 16:33

                In conclusion, although SLC NAND, eMMC, and UFS have a lower cost per bit, NOR Flash devices can still be the best choice for an embedded system booting device, especially in applications that require very fast system boot-up time.


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


                1. maquefel
                  12.09.2022 16:56
                  +1

                  Да ну ? :)

                  https://www.xilinx.com/products/intellectual-property/1-ii2qo3.html#productspecs

                  Как бы гляньте сколько места на кристалле съест, а если не на кристале, то опять же ножки и разводка тоже денег стоят.


                1. maquefel
                  12.09.2022 16:59
                  +3

                  Вот если бы вопрос был NAND vs eMMC вот тогда я бы согласился с каждым тезисом, а так нет неправда.


                  1. dlinyj
                    12.09.2022 17:06

                    Ой, всё. Правда ваша.


            1. r0mik
              12.09.2022 23:54
              +3

              недостатки скорей у EMMC, нежели у SPI NOR Flash - старо, медленно, ненадежно, принципиально не нужно в ноутбуках, материнках и микрокомпьютерах (тенденция повсеместного внедрения NVME накопителей в качестве "взрослого диска", а для SPI NOR остается UEFI и прочие "начальные инициализации").


        1. maquefel
          12.09.2022 16:04
          +3

          Тут вопрос сильно сложнее:

          1) eMMC еще надо настроить (включить тактирование)

          2) После включения доступна не вся память (основную еще надо настроить)

          и т.д.

          Это делает ZSBL (Zero-stage bootloader), который опять же надо откуда-то загрузить, а настроенной памяти может не хватать для всего функционала.

          Тогда грузиться загручик следующего уровня (условно First stage bootloader) который настраивает память и допустим eMMC и т.д.

          Получаеться, что SPI NOR настроить сильно проще это раз, во-вторых, как правило они обладают свойством XIP (Execute In Place), что вообще позволяет исполнять код прямо из флэшки.

          Там надо ФС иметь соответствующие, типа jffs2, и прочие грабли и гемморои

          Нет не нужно, для u-boot, kernel, initrd не нужно, там поиск и метка badblock's происходит при erase.

          Для rootfs раздела - да нужно, если он не RO.


          1. dlinyj
            12.09.2022 16:14
            -1

            ) eMMC еще надо настроить (включить тактирование)

            2) После включения доступна не вся память (основную еще надо настроить)

            и т.д.

            Это делает ZSBL (Zero-stage bootloader), который опять же надо откуда-то загрузить, а настроенной памяти может не хватать для всего функционала.


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

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


            1. maquefel
              12.09.2022 16:19
              +2

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

              Зависит от... eMMC контроллер стоит всего бакс, но бакс это бакс =) Так же и с памятью.

              А еще вопрос ножек остро стоит, SPI условно 4ре ножки - а eMMC ?

              Так что скорее не "старые", "современные", а hight-end, low-end, мне так кажется.


              1. corvuscorax
                13.09.2022 17:29
                +1

                У многих современных SoC есть встроенный bootloader для загрузки из eMMC. И тогда U-Boot и rootfs можно разместить на одном eMMC или SD-карте. Иногда так делают.

                Но первичная загрузка из SPI-флэш распространена больше. Как минимум из-за большей надёжности и "дуракостойкости". Если eMMC откажет, будет перетёрта по ошибке и т.д., загрузчик в SPI останется и поможет восстановить устройство или хотя бы диагностировать проблему.


        1. rcl Автор
          12.09.2022 16:51

        1. Sergey_datex
          13.09.2022 23:12
          +1

          Срок жизни современных еммц на тлц памяти - полтора-три года. NOR живут десятилетиями без питания.


    1. Karlson_rwa
      12.09.2022 17:14
      +6

      Кому мамонт, а кому насущная необходимость. Есть системы на основе ПЛИС, где нужна скорость загрузки и важен объем флешки. Вот там-то NOR и работает. И поверьте, таких задач очень много, где нужно работать сразу после подачи питания. С процессорами то же самое.