Макетная плата SPI NOR Flash

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

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

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

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

pnd3osbsbgaa8hjfqmp1tswiboa.png

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

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

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

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

ojytzfdumklyofhwfhdhoyq7toy.png

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

9oqn_dnn-bq061f_rzjkjwalyw8.png

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

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

cqrtmwtmteuie7zsfb80ssd2zx8.png

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

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

y7gnkm8f6tpwzyig5vw5s1vrsvs.png

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

2omc-nmalskmhdnaw4iseqn_vky.png

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

© Habrahabr.ru