Новости и статьи

Среда разработки встроенных систем или дистрибутивов на основе GNU/Linux. Здесь вы можете найти новости проекта, статьи и заметки, касающиеся разработки дистрибутива Radix cross Linux.

Breadboard SPI NOR Flash

26 августа 2022 г.

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

tags

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

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

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

Рис.1. Макетная плата ручной сборки.

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

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

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

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

Рис.2. Макетная плата.

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

Рис.3. Электрическая принципиальная схема макетной платы.

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

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

Рис.4. Программатор CH341A.

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

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

Рис.5. Lenovo Leez SBC P710.

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

W25Q256JV Pin Pin Leez P710
CS 1 24 SPI1_CSn0
VCC 3.3V 2 17 Vcc 3.3V
MISO 3 21 SPI1_RXD
HOLD 4
WP 5
CLK 6 23 SPI1_CLK
GND 7 20 GND
MOSI 8 19 SPI1_TXD

Для того, чтобы ядро 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.