Макетная плата SPI NOR Flash
Большинство современных 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 8×6-mm, 16-pin SOIC 300-mil).
Если распаять все пассивные элементы и разъемы, то пользователю останется только монтажная площадка для выбранной им микросхемы, монтаж которой будет удобен даже без использования дорогостоящей паяльной станции.
Электрическая принципиальная схема макетной платы показана на следующем рисунке.
Плата расчитана на 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), как показано на следующем рисунке.
Разъем 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.