Description
Driver API for SPI Bus Peripheral (Driver_SPI.h)
The Serial Peripheral Interface Bus (SPI) implements a synchronous serial bus for data exchange. In microcontroller (MCU) applications, the interface is often used to connect peripheral components at board (PCB) level. SPI devices can operate as Master (SCLK and SS are outputs) or Slave (SCLK and SS are inputs). Wikipedia offers more information about the Serial Peripheral Interface Bus.
Block Diagram
The SPI Driver API defines a SPI interface for middleware components. The SPI Driver supports multiple slaves, but if only one slave is connected, then the Slave Select signal can be omitted.
SPI Master connected to a single slave
SPI Master connected to 3 slaves
The SPI Driver functions control the following SPI signal lines.
Signal | Name | Description |
---|---|---|
SS | Slave Select (active low) | Selects the slave. This signal can be part of the SPI peripheral or implemented using a GPIO pin. |
MOSI | Master Out, Slave In | MOSI output of the Master connects to MOSI input of the Slave. |
SCLK | Serial Clock | Serial clock output from Master. Controls the transfer speed and when data are sent and read. |
MISO | Master In, Slave Out | MISO input of the Master connects to MISO output of the Slave. |
SPI API
The following header files define the Application Programming Interface (API) for the SPI interface:
Driver_SPI.h : Driver API for SPI Bus Peripheral
The driver implementation is a typical part of the Device Family Pack (DFP) that supports the peripherals of the microcontroller family.
Driver Functions
The driver functions are published in the access struct as explained in
ARM_DRIVER_SPI : access struct for SPI driver functions
Example Code
The following example code shows the usage of the SPI interface.
#include «Driver_SPI.h»
#include «cmsis_os.h»
void mySPI_Thread(void const *argument);
osThreadId tid_mySPI_Thread;
extern Driver_SPI0;
void mySPI_callback(uint32_t event)
{
switch (event)
{
case :
osSignalSet(tid_mySPI_Thread, 0x01);
break;
case :
__breakpoint(0);
break;
case :
__breakpoint(0);
break;
}
}
const uint8_t testdata_out = { 0, 1, 2, 3, 4, 5, 6, 7 };
uint8_t testdata_in ;
void mySPI_Thread(void const* arg)
{
* SPIdrv = &Driver_SPI0;
osEvent evt;
#ifdef DEBUG
version;
drv_capabilities;
version = SPIdrv->();
if (version. < 0x200)
{
return;
}
drv_capabilities = SPIdrv->();
if (drv_capabilities. == 0)
{
return;
}
#endif
SPIdrv->(mySPI_callback);
SPIdrv->();
SPIdrv->( | | | | (8), 10000000);
SPIdrv->(, );
while (1)
{
SPIdrv->(, );
SPIdrv->(testdata_out, sizeof(testdata_out));
evt = osSignalWait(0x01, 100);
if (evt.status == osEventTimeout) {
__breakpoint(0);
}
SPIdrv->(, );
SPIdrv->(, );
SPIdrv->(testdata_in, 8);
evt = osSignalWait(0x01, 100);
if (evt.status == osEventTimeout) {
__breakpoint(0);
}
SPIdrv->(, );
}
}
Немного предыстории:
Материнская плата ASUS Commando, без, модного нынче, Dual BIOS. Только Boot Block – небольшая область BIOS, не затрагиваемая записью, которая позволяет, в случае необходимости, инициализировать минимальный набор компонентов, необходимых для включения компьютера, произвести поиск BIOS на съемных носителях. Обычно подходят Floppy или флешка с файлом прошивки, переименованным в AMIBOOT.ROM (зависит от BIOS и материнской платы, точнее написано в инструкции к плате), либо CD с драйверами из комплекта поставки. Обнаружив подходящий файл, boot block запишет его в BIOS и, если все прошло правильно, компьютер после перезагрузки оживет. Неплохая фишка, несколько раз выручала, но в данном случае она не сработала, видимо, оказался поврежден и boot block.
Пришлось искать другие решения. Так как в своем арсенале инструмента у меня не было паяльной станции и стационарного программатора для разных eeprom’ок, пришлось искать более доступные решения. Рассматривая плату, я обнаружил на ней небольшой разъем SPI_J1, а микросхема флеш памяти как раз с SPI интерфейсом. Поиск в Интернет показал, что существуют вполне приличные заводские девайсы и немало самоделок для прошивки SPI микросхем через USB (об универсальных программаторах с поддержкой SPI даже не говорю, это само собой). Правда, поиск по местным магазинам, СЦ и форумам в отличии от Google ничего не дал, а заказывать и ждать месяц очень не хотелось.
Еще немного поиска, и вот оно, решение – статья чешского комрада (на чешском) о предельно простом программаторе и софтине к нему для прошивки микросхем флеш памяти с SPI интерфейсом! Ничего сложного, минимум компонентов.
Технически это очень простой способ, и требует лишь базового понимания схемотехники, умения припаять пару проводков и воспользоваться командной строкой (cmd). Но если вы не уверены в своих силах, лучше не рискуйте. Кроме того, всегда можно попросить друга, дружащего с паяльником.
Архитектура SPI flash и особенности работы
SPI flash — это тип флэш-памяти, который используется для хранения кода программного обеспечения, данных и настроек во многих электронных устройствах, таких как микроконтроллеры, микропроцессоры, системы хранения данных и другие подобные устройства.
Архитектура SPI flash состоит из нескольких основных компонентов:
- Ячейки памяти: SPI flash состоит из большого количества ячеек памяти, каждая из которых может хранить один бит информации. Эти ячейки организованы в блоки и сектора, чтобы обеспечить более эффективное управление памятью и выполнение операций чтения и записи.
- Контроллер памяти: SPI flash имеет встроенный контроллер памяти, который управляет операциями чтения, записи, стирания и другими операциями. Контроллер памяти обрабатывает команды, полученные от внешнего устройства или микроконтроллера, и выполняет необходимые операции для доступа к данным в памяти.
- Интерфейс SPI: SPI flash подключается к другим устройствам через интерфейс Serial Peripheral Interface (SPI). Интерфейс SPI позволяет передавать данные по одному биту за раз и осуществлять коммуникацию в режиме полудуплекса, что обеспечивает простоту и надежность обмена информацией с устройствами.
Особенности работы SPI flash:
Быстрый доступ к данным: SPI flash обладает высокой скоростью доступа к данным, что позволяет быстро считывать и записывать информацию
Это особенно важно для устройств, требующих быстрого выполнения операций чтения и записи, таких как быстрый запуск или обновление программного обеспечения.
Многократная перезапись: SPI flash имеет большую прочность и выносливость к многократной перезаписи данных. Это означает, что данные могут быть многократно записаны и стерты, не снижая производительности или качества хранения данных.
Низкое потребление энергии: SPI flash потребляет очень мало энергии и обеспечивает длительное время работы от аккумулятора или других источников питания
Это делает его идеальным выбором для энергоэффективных устройств и мобильных приложений.
Надежность хранения данных: SPI flash обладает высокой надежностью хранения данных, что позволяет сохранять важные данные даже при отключении питания. Это делает его идеальным для хранения критически важной информации, такой как загрузочный код, настройки системы и другие данные, которые не могут быть потеряны или повреждены.
В целом, SPI flash является важной компонентой для многих электронных устройств, предоставляющей высокую производительность, надежность и удобство использования
Что такое SPI
SPI расшифровывается как Serial Peripheral Interface и переводится как последовательный интерфейс (периферийных устройств), а по своей сути он является протоколом последовательной связи. Интерфейс SPI был разработан в компании Motorola в 1970 г. Интерфейс SPI имеет полное дуплексное соединение, что означает что данные передаются и принимаются одновременно. То есть ведущий (master) может передавать данные ведомому (slave), а ведомый одновременно с этим может передавать данные ведущему. SPI является протоколом синхронной последовательной связи, то есть ему для работы необходима синхронизация всех устройств. Ранее использование данного интерфейса на нашем сайте мы рассматривали при подключении графического ЖК дисплея Nokia 5110 к плате Arduino.
Источники информации
1) Intel Low Pin Count (LPC) Interface Specification. Revision 1.1. Document Number 251289-001. 2) Intel P965 Express Chipset Family Datasheet – For the Intel 82P965 Memory Controller Hub (MCH). Document Number: 313053-001. 3) Intel I/O Controller Hub 8 (ICH8) Family Datasheet – For the Intel 82801HB ICH8 and 82801HR ICH8R I/O Controller Hubs. Document Number: 313056-001.
4) 1 Mbit SPI Serial Flash SST25VF010 Data Sheet. Document Number: S71233-01-000. 5) 8 Mbit SPI Serial Flash SST25VF080B Data Sheet. Document Number: S71296-01-000.
6) W25X10A, W25X20A, W25X40A, W25X80A 1M-bit, 2M-bit, 4M-bit and 8M-bit Serial Flash Memory with 4KB sectors and dual output SPI Data Sheet.
7) MX25L802 8M-bit CMOS Serial Flash EEPROM Data Sheet.
SPI EEPROM Interface Specification. Part Number 223-0017-004 Revision H.
3Стандартная библиотека для работы по интерфейсу SPI
Для Arduino написана специальная библиотека, которая реализует протокол SPI. Она устанавливается вместе со средой разработки Arduino IDE. Подключается она так: в начале программы добавляем #include SPI.h.
Чтобы начать работу по протоколу SPI, нужно задать настройки и затем инициализировать протокол с помощью процедуры SPI.beginTransaction(). Можно выполнить это одной инструкцией: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))
Это значит, что мы инициализируем протокол SPI на частоте 14 МГц, передача данных идёт, начиная с MSB (наиболее значимого бита), в режиме SPI_MODE0.
После инициализации выбираем ведомое устройство, переводя соответствующий пин SS в состояние LOW. Затем передаём ведомому устройству данные командой SPI.transfer(). После передачи возвращаем SS в состояние HIGH.
Временная диаграмма работы интерфейса SPI
Работа с протоколом завершается командой SPI.endTransaction().
Желательно минимизировать время выполнения передачи между инструкциями SPI.beginTransaction() и SPI.endTransaction(), чтобы не возникло накладок, если другое устройство попробует инициализировать передачу данных, используя другие настройки.
Если вы планируете в своём скетче использовать стандартные пины Arduino, можно не описывать их в начале программы, т.к. они уже определены в самой библиотеке и имеют следующие имена:
#define PIN_SPI_SS (10) #define PIN_SPI_MOSI (11) #define PIN_SPI_MISO (12) #define PIN_SPI_SCK (13)
Данные пины определены в файле pins_arduino.h , который находится по пути %programfiles%\arduino-(версия)\hardware\arduino\avr\variants\ (если вы устанавливали программу в стандартное расположение). То есть, например, чтобы опустить пин выбора ведомого в состояние «0», можно написать:
digitalWrite(PIN_SPI_SS, LOW);
2.4. Запись образа SPI NAND
Рассмотрим несколько примеров. На рисунке ниже показано окно подтверждения начала записи с открытой закладкой ECC в случае, если форматы резервной области и исходного файла и микросхемы совпадают:
На следующем рисунке когда форматы резервной области и исходного файла также совпадают, но формат другой:
Ниже показан случай несовпадения разметки резервных областей:
В этом случае программа выдает предупреждение и блокирует попытку записи такой микросхемы, как заведомо неуспешную.
Попробуем записать файл в микросхему SPI NAND с включенным режимом внутренней генерации ECC. На рисунке ниже показан пример такой записи:
На левой части рисунка представлено окно редактора, которое соответствует тому, что мы писали в микросхему. На правой части отображается то, что было записано и считано в результате работы внутреннего алгоритма ECC.
- Основная область страницы в редакторе показана обычным шрифтом;
- Резервная (spare) область микросхемы показана тусклым шрифтом, место маркера плохого блока показано на оранжевом фоне;
- Резервная (spare) область микросхемы предназначенная для размещения ECC выделена светло-голубым фоном;
- Резервная (spare) область микросхемы заполненная кодами ECC (результат внутренней генерации ECC).
Хорошо видно, что часть страницы, предназначенная для ECC, была автоматически ими заполнена и записана. При этом исходное содержимое этой области полностью игнорируется.
Программное обеспечение программатора ChipStar знает о такой особенности этих микросхем и не выдает ошибок при верификации таких микросхем: все различия в области ECC будут учтены в отчете о верификации, но ошибка верификации выдана не будет. А вот при сравнении двух файлов эти области будут отмечены как ошибочные. Таким образом, можно гибко анализировать и сравнивать содержимое микросхем.
1.2. Отличие микросхем SPI NAND от обычных (параллельных) микросхем NAND FLASH
Основное отличие заключается в том, что SPI NAND используют последовательный (serial) аппаратный интерфейс стандарта SPI (Serial Peripheral Interface).
Использование SPI дает ряд преимуществ:
- Позволяет сделать корпус микросхем более компактным;
- Позволяет использовать меньшее количество сигналов для управления микросхемой (4 против минимум 13 у параллельных NAND).
Однако SPI интерфейс при прочих равных условиях более медленный, поэтому микросхемы будут читаться и писаться несколько медленнее, чем традиционные NAND.
Все остальные особенности SPI NAND (логическая организация, управление плохими блоками и исправление ошибок) идентичны используемым у параллельных NAND и подробно рассмотрены в основной статье. Единственное отличие лишь в том, что в SPI NAND более широко используется механизм встроенного вычисления ECC кодов и исправления ошибок сразу внутри микросхемы. По этому признаку SPI NAND относятся к категории Managed NAND (управляемые NAND).
Главной особенностью логической организации SPI NAND является то, что большинство из них поддерживают встроенную генерацию кодов исправления ошибок (ECC) при записи и автоматическое исправление ошибок при чтении:
- Коды ECC вычисляются непосредственно перед записью страницы;
- Корректировка происходит сразу после считывания страницы;
- Коды ЕСС записываются в определенное место SPARE области страницы;
- Коды ECC вычисляются для всей области данных страницы, но только для некоторой части SPARE области;
- Разметка SPARE области для разных микросхем разная;
- Вычисление ECC у большинства микросхем можно временно отключить;
- У некоторых микросхем часть области SPARE, в которой сохраняются коды ECC, недоступна для пользователя;
- У некоторых микросхем при включении или выключении внутреннего вычисления ЕСС изменяется размер SPARE области;
Все вышеописанное скорее усложняет, чем упрощает, работу тем, кто занимается ремонтом аппаратуры и заранее не знает, каким образом и в каком режиме ECC используется микросхема в аппаратуре.
5Скетч для управления сдвиговым регистром по интерфейсу SPI
Напишем скетч, реализующий «бегущую волну», последовательно зажигая светодиоды, подключённые к выходам сдвигового регистра.
#include <SPI.h> const int pinSelect = 8; // пин выбора регистра void setup() { SPI.begin(); // инициализация интерфейса SPI pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // выбор ведомого устройств (регистра) SPI.transfer(0); // очищаем содержимое регистра digitalWrite(pinSelect, HIGH); // конец передачи Serial.begin(9600); } void loop() { for (int i=0; i}
Сначала подключим библиотеку SPI и инициализируем интерфейс SPI. Определим пин 8 как пин выбора ведомого устройства SS. Очистим сдвиговый регистр, послав в него значение «0». Инициализируем последовательный порт.
Чтобы зажечь определённый светодиод с помощью сдвигового регистра, нужно подать на его вход 8-разрядное число. Например, чтобы загорелся первый светодиод – подаём двоичное число 00000001, чтобы второй – 00000010, чтобы третий – 00000100, и т.д. Эти двоичные числа при переводе в десятичную систему счисления образуют такую последовательность: 1, 2, 4, 8, 16, 32, 64, 128 и являются степенями двойки от 0 до 7.
Соответственно, в цикле loop() по количеству светодиодов делаем пересчёт от 0 до 7. Функция pow(основание, степень) возводит 2 в степень счётчика цикла. Микроконтроллеры не очень точно работают с числами типа «double», поэтому для преобразования результата в целое число используем функцию округления round(). И передаём получившееся число в сдвиговый регистр. Для наглядности в монитор последовательного порта выводятся значения, которые получаются при этой операции: единичка «бежит» по разрядам – светодиоды загораются волной.
Числа, посылаемые в сдвиговый регистр 74HC595
I»m using flashrom with linux_spi and it doesn»t find the chip. I»ve double checked all connections, what else can I try?
Прочитано:
372
BIOS (базовая система ввода/вывода), позволяющая операционным системам и оборудованию корректно взаимодействовать друг с другом, присутствует в каждом современном компьютере и располагается в чипе на материнской плате.
Чтобы узнать версию BIOS
, выполните в Ubuntu следующую команду:
keiz@ekz:~$ sudo dmidecode -s bios-version
Чтобы посмотреть дату релиза BIOS вашего компьютера
, выполните команду:
keiz@ekz:~$ sudo dmidecode -s bios-release-date
04/09/2009
Узнаем марку нашей материнской платы
:
keiz@ekz:~$ sudo dmidecode —type baseboard
SMBIOS 2.4 present.
Handle 0x0002, DMI type 2, 8 bytes
Base Board Information
Manufacturer: Gigabyte Technology Co., Ltd.
Product Name: GA-MA770-UD3
Для обновления версии Биоса из под Операционной системы Ubuntu
понадобится следующая утилита: — flashrom
.
столкнулся с такой проблемой.
шеф дал ноут, который принес из сервиски.
грит, поставь вынь.
ставлю вынь — не хочет ибо установщик не находит хард, который есть sata.
в сервиске биос поставили старый, без поддержки usb что сильно зарудняет работу и возможности определения в ручную типа соединения харда.
через диск биос не обновить ибо в досе он не видит привод почемуто.
но вот линь поставился на ура и все увидел(хотя usb все таки проигнорировал)
ноут Acer Aspire 5110
пришла мысля поставить линь и через него прошить bios.
порылся в и-нете и наткнулся на статью.
думаю пригодиться.
Практика
Для прошивания БИОСа в линуксе требуется только две вещи — сама прошивка БИОСа и программа, которая будет этот самый БИОС прошивать. Программу можно скачать в исходниках отсюда: http://openbios.info/FlashRom или же в Debian-based (например в Ubuntu) дистрибутивах поставить с помощью APT:
#apt-get install flashrom
Перед записью новой прошивки в БИОС, желательно сохранить старую версию, то есть скопировать прошивку, которая уже прошита в БИОСе, чтобы потом можно было легко восстановить все обратно:
#flashrom -r MyBIOS.bin
Где MyBIOS.bin — это имя файла, в который сохранится старая версия прошивки. После сохранения, можно уже на свой страх и риск записывать скачанную прошивку в БИОС:
#sudo flashrom -w NewBIOS.bin
Где NewBIOS.bin — это имя скачанной прошивки. Также, можно добавить ключ -v чтобы программа проверила записанную прошивку и еще можно добавить ключ -V чтобы вывод работы был более информативным:
#sudo flashrom -Vvw NewBIOS.bin
С остальными же ключами можно ознакомиться с помощью —help
$flashrom —help
На примере была испытана материнская плата GIGABYTE GA-965P-DQ6 rev2.0 с Ubuntu 8.04 GNU/Linux на борту
Консольная утилита для идентификации, чтения, записи, проверки и стирания микросхем Flash памяти.
Основное назначение — это перепрошивка BIOS, etc, а потому в списке устройств программирования много весьма специфичных. Но так же поддерживаются распространённые программаторы/адаптеры:
- ft2232_spi,
- serprog,
- buspirate_spi,
- rayer_spi,
- pony_spi
Адаптеры rayer и pony подключается на LPT порт, так что в современных реалиях их использование затруднительно.
Finding the relevant memory area
After dumping the whole flash memory to a file, we can inspect it using our favorite hex editor.
I use emacs to open, inspect and modify the file ().
Next we look for the recognizable string we entered in the first step. Let’s see if I can find it:
There it is! Starting at address seems to be my WiFi SSID and right below it there seems to be my recognizable password!
But wait, we shouldn’t change the password yet.
If we did that now, we would have to write the whole 4 MiB to the device again.
That can’t be good for our poor flash sectors and our free time.
We don’t need to read and write the entire memory again now that we know where the relevant configuration is stored.
We can start reading at the relative offset and stop a couple of bytes after that!
Our SSID and WiFi password will still be in there.
Keep in mind that we started reading at the address , so we have to add our offset on top of that.
We have to pay attention to the flash memory sectors because the esptool and the underlying flash storage only support writing entire flash sectors which are multiple KiB large.
The Wemos data sheet says that the flash sector size is 4 KiB, thus we are only able to read and write 4 KiB blocks of memory.
Also the memory has to be aligned to a block (we can’t just read the last half of the first block and the first half of the second block).
First, let’s calculate the starting memory address by adding the physical base address to the offset we found:
\begin{equation}
\mathrm{base} + \mathrm{offset} = \mathtt{0x7e000} + \mathtt{0x37d090} = \mathtt{0x3FB090}
\end{equation}
Интерфейс SPI: историческая справка
Как известно, быстродействие микросхемы постоянного запоминающего устройства
(Flash ROM), используемой в качестве носителя BIOS, практически не влияет на
общую производительность компьютера. Это связано с тем, что при старте
материнской платы, BIOS переписывается (или распаковывается) в оперативную
память Shadow RAM и при обращении к BIOS в сеансе ОС, программы работают с
оперативной памятью, а не с микросхемой Flash ROM. Поэтому, в отличие от
процессора, памяти, графической подсистемы, эволюция которых сопровождается
ростом производительности, микросхемы Flash ROM и их интерфейсы развиваются в
другом направлении. Здесь главными критериями являются уменьшение стоимости,
потребляемой мощности и занимаемой площади на материнской плате. Главный метод
достижения этих целей – уменьшение количества проводников между микросхемой BIOS
и контроллером, обычно входящим в состав «южного моста» чипсета. С точки зрения
метода подключения микросхемы BIOS, можно выделить три поколения материнских
плат:
1) На платах, использующих шину ISA, устанавливались микросхемы постоянных
запоминающих устройств с раздельными линиями адреса, данных и управления. При
этом для каждого разряда адреса и данных, а также для каждого сигнала управления
(чтение, запись) требовался свой провод, точнее печатный проводник на плате.
2) С появлением чипсетов Intel 810, 815, на основе «хабовой» архитектуры,
шина ISA ушла в прошлое. Ряд устройств материнской платы, ранее подключаемых к
ISA (контроллер гибких дисков, порты COM и LPT, микросхема BIOS), «переехали» на
интерфейс Low Pin Count или LPC, название которого переводится как «малое
количество сигналов». Сигналы адреса, данных и управления в этом интерфейсе
передаются по пяти линиям (не считая сигналов сброса, тактирования и линий
питания), в режиме мультиплексирования во времени. Микросхемы BIOS, используемые
в таких платформах, иногда называют Firmware Hub или FWH. Пример программы
стирания и записи микросхемы BIOS, приведенный в ранее опубликованной статье
«Проникновение в BIOS ROM» N1 и N2″ предназначен для таких платформ.
3) Начиная с чипсета Intel 945, в состав «южного моста» включен контроллер
специализированной последовательной шины Serial Peripheral Interface или SPI,
использующий передачу данных чтения и записи, а также управляющей и статусной
информации по однобитному последовательному каналу. Это позволило использовать
8-контактный корпус для микросхемы BIOS. Данная статья посвящена рассмотрению
именно таких платформ.
Отметим, что интерфейс LPC также поддерживается современными чипсетами и
разработчик материнской платы может использовать для подключения микросхемы BIOS
как LPC, так и SPI. Сфера применения интерфейса SPI не ограничивается
материнскими платами компьютеров
Внимательный читатель мог обратить внимание на
то, что из-за перехода к последовательному формату данных, каждый из описанных
интерфейсов использует больше тактов для выполнения операций чтения и записи,
чем его предшественник, что чревато снижением быстродействия. Но этого не
происходит, так как указанное обстоятельство компенсируется ростом частоты и
оптимизацией форматов данных
Шина ISA работает на частотах 5-8MHz, LPC на
33MHz, SPI на 33-50 MHz.
3Программа «Реализация SPI с помощью микросхем FTDI»
«SPI via FTDI» версии 1 (разворачивается)
Представляю вашему вниманию программу «Реализация SPI с помощью микросхем фирмы FTDI» или «SPI via FTDI» – программное обеспечение, написанное под .NET и предназначенное для передачи данных из ПК и приёма данных в ПК с помощью микросхем фирмы FTDI (семейства FT22xx, FT23xx, FT42xx) по последовательному интерфейсу SPI. Это ПО позволит вам организовать обмен данными с устройствами, которые работают по интерфейсу SPI.
Микросхемы FT2ххx и FT3xxx работают только в режиме ведущего устройства SPI (master).
С помощью данной программы вы сможете оперативно протестировать вашу микросхему в разных режимах работы. Подключившись логическим анализатором к выводам SK, DO, DI и CS микросхемы, можно наглядно увидеть, как влияют разные настройки на способ передачи данных.
Системные требования
- Операционная система Windows XP и выше, в т.ч. Windows 10. Программа работает как с x86, так и с x64 операционными системами.
- .NET Framework версии 3.5 SP1.
- Наличие USB порта.
Установка и настройка программы «SPI с помощью микросхем FTDI»
Если программа запускается на компьютере с ОС Windows XP, необходимо убедиться в наличии установленной .NET Framework и, при её отсутствии, установить.
Скачать .NET Framework 3.5 SP1. После установки .NET Framework компьютер следует перезагрузить.
В Windows Vista, Windows 7 и 10 библиотеки .NET версии 3.5 присутствуют по умолчанию. Для установки на Windows 8 потребуется произвести дополнительные операции, а именно вручную включить возможность установки среды .NET.
Установка программы осуществляется копированием исполняемого файла с установочного носителя в нужное расположение.
При первом запуске программа проверит наличие необходимых для работы с микросхемами динамических библиотек D2XX.dll и FTCSPI.dll и, при их отсутствии, запишет их на компьютер в директорию C:\Temp.
Возможности программы
- Передача данных из файла или введённого вручную массива байтов из ведущего устройства (микросхемы FTDI) к ведомому устройству,
реализующему интерфейс SPI. - Приём данных от ведомого устройства.
- Циклический приём данных заданное количество раз и в бесконечном цикле.
- Изменение настроек работы SPI, а также частотно-временных характеристик приёма и передачи «на ходу». Реализация различных режимов работы интерфейса SPI.
- Сохранение принятых данных в файл (текстовый или двоичный).
Работа с программой «SPI via FTDI»
При запуске программа определяет наличие подключённых к системе поддерживаемых устройств FTDI и создаёт для каждого устройства свою вкладку. Если после запуска программы были подключены новые устройства FTDI, можно обновить список устройств, нажав кнопку с синей стрелкой (Обновить).
Внешний вид главного окна программы «SPI с помощью FTDI»
Выбор настроек осуществляется выбором желаемых параметров в левой панели главного окна программы. Каждое устройство конфигурируется независимо.
Подключение к устройству FTDI осуществляется нажатием на кнопку в заголовке вкладки. Отключение – нажатием на ту же кнопку. Возможно одновременное подключение к нескольким устройствам.
Передача данных возможна тремя способами: выбором файла (кнопка с иконкой папки), отправкой произвольной последовательности байтов (в поле Преамбула при активном флажке), а также отправка преамбулы, а затем выбранного файла, если выбраны оба варианта. Передача данных осуществляется нажатием на кнопку Записать.
Приём данных от ведомого устройства осуществляется нажатием на кнопку Прочитать. Если в поле справа от кнопки введено число, отличное от 1, приём будет осуществлён соответствующее число раз; если указан «0», то чтение будет продолжаться бесконечно (до принудительной остановки).
При чтении все принятые данные автоматически сохраняются в файл (текстовый или двоичный, по выбору пользователя) в директорию с программой. Открытие файла происходит по нажатию на кнопку Открыть.
Данная программа использует только базовые возможности микросхем FTDI. Например, вы не сможете назначить несколько пинов Chip Select (используется только первый CS, см. таблицы выше), не сможете использовать выводы GPIOH. Т.е., сможете подключить только одно ведомое устройство SPI.
Инкапсуляция
8-контактный, как показано на рисунке, является более часто используемым корпусом. Значение каждого контакта:
-
CS, выбор микросхемы, вывод включения микросхемы. Когда CS подтягивается к высокому уровню, микросхема обрабатывает режим энергосбережения, а каждый вывод данных (D0 / D1 / D2 / D3) обрабатывает состояние высокого импеданса. Чип работает, данные булавки могут быть переданы.
-
DO используется для вывода данных или состояния (на заднем фронте CLK). Обычно только DI / DO используется в качестве вывода IO. Чтобы включить режим Quad, вам необходимо установить бит QE (Quad Enable). Когда QE = 1, WP и HOLD становятся IO2 соответственно, IO3.
-
Вывод WP, активный низкий уровень для защиты регистра состояния от записи.
-
GND земля
-
DI используется для ввода команд, адресов или данных во Flash (на переднем фронте CLK).
-
CLK обеспечивает синхронные часы для операций ввода и вывода.
-
Вывод HOLD очень полезен, когда несколько микросхем совместно используют шину SPI. Когда HOLD имеет низкий уровень, вывод DO приобретает высокий импеданс, а сигнал на DI / CLK в это время игнорируется. Это эквивалентно тому, что микросхема в это время не работает. . Предположения. Операция записи страницы SPI FLASH выполняется только наполовину. В это время приходит прерывание, и другая задача с более высоким приоритетом занимает шину SPI. В это время вы можете использовать HOLD, чтобы сбросить низкий уровень, чтобы приостановить внутреннюю работу. SPI FLASH, и дождитесь, пока не вернется к задаче, и пусть операция продолжится.
-
VCC, 2.7 ~ 3.6V
Выбор: SF & SD
Существует множество причин для выбора дискретной флэш-микросхемы вместо подсистемы SD или, наоборот, поэтому пользователю необходимо выбирать компромиссы перед приобретением устройства. Приведенный ниже список содержит несколько аргументов, которые нужно знать, перед выбором DIP-чипа или полноценного SD-решения:
- Аппаратная сложность, преимущество имеет SF. DIP-пакет с дискретной флеш-микросхемой намного проще использовать, чем SD.
- Сложность программного обеспечения, преимущество имеет SF. Подсистема флэш-памяти SD обычно опирается на библиотеки SD Fat16/32. Хотя устройства являются интерфейсом SPI, имеет смысл использовать FAT, поскольку любой ПК/MAC может считывать карту. Эти библиотеки большие и могут занимать драгоценное пространство EEPROM на малых встроенных контроллерах.
- Емкость и портативность, преимущество имеет SD. Можно использовать SD-карту большей емкости в существующем дизайне без изменений. Дискретная SPI имеет более низкие пределы плотности.
- Стоимость, преимущество имеет SF.
- Мощность, преимущество имеет SF. SD-карты обычно имеют более высокую мощность утечки из-за более высокой плотности и высокой динамической мощности из-за скорости доступа.
- Скорость, преимущество имеет SD. SD-флэш-память поставляется во многих различных SKU, основанных на скорости в основном из-за требований цифровой фотографии и использования необработанных форматов изображений.
1Описание последовательного интерфейса SPI
SPI – Serial Peripheral Interface или «Последовательный периферийный интерфейс» – это синхронный протокол передачи данных для сопряжения ведущего устройства (Master) с периферийными устройствами (Slave). Ведущим устройством часто является микроконтроллер. Связь между устройствами осуществляется по четырём проводам, поэтому SPI иногда называют «четырёхпроводной интерфейс». Вот эти шины:
Название | Назначение шины SPI |
---|---|
MOSI (Master Out Slave In) | линия передачи данных от ведущего к ведомым устройствам; |
MISO (Master In Slave Out) | линия передачи от ведомого к ведущему устройству; |
SCLK (Serial Clock) | тактовые импульсы синхронизации, генерируемые ведущим устройством; |
SS (Slave Select) | линия выбора ведомого устройства; когда на линии логический «0», ведомое устройство «понимает», что сейчас обращаются к нему. |
Существует четыре режима передачи данных (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), обусловленные сочетанием полярности тактовых импульсов (работаем по уровню HIGH или LOW), Clock Polarity, CPOL, и фазой тактовых импульсов (синхронизация по переднему или заднему фронту тактового импульса), Clock Phase, CPHA. В последнем столбце таблицы приведены поясняющие иллюстрации. На них Sample обозначены моменты, когда данные на линии должны быть готовы и считываются устройствами
Буквой Z отмечено, что состояние данных на линии неизвестно или не важно
Режим | Полярность тактовых импульсов (CPOL) | Фаза тактовых импульсов (CPHA) | Диаграмма режима |
---|---|---|---|
SPI_MODE0 | |||
SPI_MODE1 | 1 | ||
SPI_MODE2 | 1 | ||
SPI_MODE3 | 1 | 1 |
Интерфейс SPI предусматривает несколько вариантов подключения ведомых устройств: независимое и каскадное. При независимом подключении к шине SPI ведущее устройство обращается к каждому ведомому устройству индивидуально. При каскадном подключении ведомые устройства срабатывают поочерёдно, как бы каскадом.
Виды подключения устройств для работы по интерфейсу SPI: независимое и каскадное