Рейтинг@Mail.ru
Плата с микросхемой FT2232D
Плата с микросхемой FT2232D

Реализация SPI с помощью микросхем фирмы FTDI

автор:
Be the first to comment! Программирование
Print Friendly, PDF & Email

Рассматриваются основные этапы программной реализации работы в режиме последовательного интерфейса SPI микросхем семейств FT2xx и FT4xx фирмы FTDI. А также предлагается готовое бесплатное программное обеспечение, которое реализует этот режим. С помощью данной программы можно читать (и записывать) информацию с множества датчиков и прочих устройств, которые работают по интерфейсу SPI или I2C.

1Микросхемы фирмы FTDI

Мы уже не раз обсуждали работу с интерфейсом SPI, реализуя его с помощью Arduino. На этот раз рассмотрим этот интерфейс на примере работы с микросхемами фирмы FTDI, а именно FT2232 и FT4232, которые пользуются огромной популярностью среди разработчиков радиоэлектронной аппаратуры из-за своей дешевизны, надёжности и хорошей поддержки со стороны производителя.

FTDI выпускает микросхемы с суффиксом H (например, FT2232H) – выскоскоростные, с суффиксом D (FT2232D) – низкоскоростные.

Для работы с микросхемами нам понадобится отладочная или любая другая плата с микросхемой FTDI и всей необходимой «обвязкой». Для примера на фотографии приведена одна из плат, которую я использую для различных проектов.

Отладочная плата с микросхемой FT2232D
Отладочная плата с микросхемой FT2232D

С помощью платы с микросхемой FTDI вы сможете читать данные со всевозможных датчиков и конфигурировать их, передавать данные различным устройствам, читать из памяти и записывать в память, а также делать многое-многое другое. Потенциал у микросхемы FT2232 поистине огромный. Ниже в статье я приведу несколько реальных примеров использования этих микросхем.

Для тестов вы можете купить готовую плату у наших китайских друзей или сделать плату самому, используя типовое решение, приведённое в техническом описании (datasheet) на данные микросхемы. Вот ещё один прекрасный образец такой платы:

Отладочная плата с микросхемой FT2232HL
Отладочная плата с микросхемой FT2232HL

Заказать такую плату можно на этом сайте.

На двух иллюстрациях ниже, взятых из технических описаний, приводится назначение ножек микросхем FT2232D (низкоскоростной) и FT2232H (высокоскоростной) при работе в разных режимах, в том числе SPI (см. столбец MPSSE).

Ножки микросхем, обозначенные GPIOL («нижние» порты ввода-вывода GPIO), могут работать в качестве выбора ведомого (Chip Select), т.е., как видно, к микросхемам FT2232D и FT2232H можно подключить до 5 ведомых устройств SPI к одному каналу.

Назначение выводов микросхемы FT2232D при работе в разных режимах
Назначение выводов микросхемы FT2232D при работе в разных режимах

Доступны также «верхние» порты ввода-вывода GPIOH: 4 у микросхемы FT2232D и 8 – у микросхемы FT2232H. Эти ножки также можно использовать в качестве чип-селекта, или для иных целей.

Назначение выводов микросхемы FT2232H при работе в разных режимах
Назначение выводов микросхемы FT2232H при работе в разных режимах

2Библиотеки для работы с микросхемами FTDIFTCSPI.dll и FTD2XX.dll

Если вы хотите реализовать программное обеспечение, использующее микросхемы FTDI для работы по интерфейсу SPI, нужно зайти на сайт производителя и скачать динамические библиотеки FTD2XX.dll и FTCSPI.dll. Первая из них – общего назначения – и входит в состав пакета драйверов FTDI WHQL Certified. Includes VCP and D2XX. Вторая предназначена исключительно для работы по SPI, и найти её можно на странице FTC SPI. Для работы с обеими библиотеками есть прекрасные подробные инструкции для программистов (Programmers Guide), которые любезно выложены на том же сайте фирмы FTDI. Они обязательны для прочтения, если вы будете разрабатывать ПО, работающее с микросхемами FTDI.

Указанный драйвер FTDI WHQL Certified должен быть установлен в любом случае, прежде, чем вы начнёте работать с микросхемами FTхххх.

Дальнейшая последовательность действий такая: вы создаёте проект в Visual Studio или в той IDE, в которой пишете свои программы. Размещаете обе библиотеки в папке проекта. Импортируете нужный функционал в свой проект через директивы [DllImport]. Например, для проектов на VB.NET импорт функции FT_Open из библиотеки ftd2xx.dll будет выглядеть так:

<DllImport("c:\Temp\ftd2xx.dll", SetLastError:=True, CallingConvention:=CallingConvention.StdCall)> _
Private Shared Function FT_Open(ByVal deviceNumber As Integer, ByRef pHandle As Integer) As Integer
End Function

Public Shared Sub OpenDevice(ByVal deviceNumber As Integer, ByRef pHandle As Integer)
   Dim r As Integer = FT_Open(deviceNumber, pHandle)
   If r <> FT_OK Then
        Throw New Exception(r)
    End If
End Sub

То же самое на C#:

[DllImport("c:\Temp\ftd2xx.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
private static extern int FT_Open(int deviceNumber, ref int pHandle);

public static void OpenDevice(int deviceNumber, ref int pHandle)
{
    int r = FT_Open(deviceNumber, ref pHandle);
    if (r != FT_OK) 
    {
	throw new Exception(r);
    }
}

Собственно, метод FT_Open импортируется как закрытый в первых двух строках кода, а следом объявляется открытый метод с теми же (или другими, если это удобно) входными параметрами для обращения к нему из других классов сборки. В принципе, можно сразу объявлять метод как открытый и обращаться к нему напрямую из других классов вашей сборки, но более правильно объявлять методы, обращающиеся к нативному неуправляемому коду, закрытыми, а внутри .NET приложения использовать открытые управляемые методы.

Импортировать все функции из DLL не нужно. Внимательно изучите Programmers Guide и выберите только те функции и структуры, которые понадобятся вам для решения вашей задачи.

Как правильно и какие типы импортировать? Поможет замечательный инструмент PInvoker, о котором мы уже писали, или любой другой аналогичный. Ну и конечно же, заголовочные h-файлы из скачанного архива с драйвером, а также руководство программиста.

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»
Внешний вид главного окна программы «SPI с помощью FTDI»

Выбор настроек осуществляется выбором желаемых параметров в левой панели главного окна программы. Каждое устройство конфигурируется независимо.

Подключение к устройству FTDI осуществляется нажатием на кнопку в заголовке вкладки. Отключение – нажатием на ту же кнопку. Возможно одновременное подключение к нескольким устройствам.

Передача данных возможна тремя способами: выбором файла (кнопка с иконкой папки), отправкой произвольной последовательности байтов (в поле Преамбула при активном флажке), а также отправка преамбулы, а затем выбранного файла, если выбраны оба варианта. Передача данных осуществляется нажатием на кнопку Записать.

Приём данных от ведомого устройства осуществляется нажатием на кнопку Прочитать. Если в поле справа от кнопки введено число, отличное от 1, приём будет осуществлён соответствующее число раз; если указан "0", то чтение будет продолжаться бесконечно (до принудительной остановки).

При чтении все принятые данные автоматически сохраняются в файл (текстовый или двоичный, по выбору пользователя) в директорию с программой. Открытие файла происходит по нажатию на кнопку Открыть.

Данная программа использует только базовые возможности микросхем FTDI. Например, вы не сможете назначить несколько пинов Chip Select (используется только первый CS, см. таблицы выше), не сможете использовать выводы GPIOH. Т.е., сможете подключить только одно ведомое устройство SPI.

Скачать программу "SPI via FTDI"

Скачать программу можно по любой из ссылок ниже. Пишите свои замечания и отзывы о работе с программой в комментариях или мне на электронную почту.

"SPI via FTDI" версии 2

По сравнению с первой версией, программа была полностью переписана. Теперь она использует другую динамически загружаемую библиотеку – libMPSSE.dll. Эта библиотека позволяет управлять микросхемами FTDI, поддерживающими режим MPSSE – Multi-Protocol Synchronous Serial Engine.

Кроме того, программа приобрела несколько новых, весьма полезных, возможностей. Среди них:

  • поддержка интерфейсов SPI и I2C;
  • поддержка переключаемых профилей;
  • переключение между оригинальной и модифицированной библиотеками (об этом ниже);
  • сканер шины I2C;
  • полезные инструменты: генератор прямоугольных импульсов, управление выводами общего назначения;
  • технические описания (datasheet) на микросхемы FT2232H и FT2232D всегда под рукой.

Главное окно программы SPI via FTDI (в режиме SPI) выглядит так:

Главное окно программы «SPI via FTDI»
Главное окно программы «SPI via FTDI»

Как видно, пользовательский интерфейс программы претерпел небольшие изменения. Главное окно по-прежнему состоит из двух частей: левая содержит панели настройки режима, записи и чтения, а правая – список вкладок, где каждая отвечает за своё устройство MPSSE.

Если кликнуть правой кнопкой мыши на заголовке вкладки, откроется контекстное меню, через которое можно подключиться к устройству FTDI (или отключиться), а также просмотреть краткую информацию о нём.

Контекстное меню для устройства MPSSE
Контекстное меню для устройства MPSSE

Возможность подключиться и отключиться к устройству FTDI продублирована в главном меню программы, пункт Устройство. Это действует для текущего активного устройства. Также для подключения/отключения удобно использовать горячие клавиши Ctrl+C.

Информацию об устройстве содержит такие данные как тип микросхемы, текстовое описание, сохранённое в ПЗУ микросхемы FTDI, её серийный номер, идентификатор и флаги.

Окно с краткими сведениями об устройстве MPSSE
Окно с краткими сведениями об устройстве MPSSE
Выбор режима работы, интерфейса SPI или I2C, версии библиотеки

Главное меню программы SPI via FTDI выглядит так:

Главное меню программы «SPI via FTDI»: Устройство
Главное меню программы «SPI via FTDI»: Устройство

Если вы подключили устройства FTDI после того, как была запущена программа, выберите пункт Обнаружить устройства или нажмите сочетание клавиш Ctrl+F. Все доступные устройства FTDI, которые поддерживают режим MPSSE, будут обнаружены и добавлены в соответствующие вкладки.

В главном меню можно выбрать интерфейс, по которому мы хотим работать с устройством: SPI или I2C. Программа запоминает последний использовавшийся интерфейс.

Программа «SPI via FTDI» позволяет работать одновременно только в одном режиме для всех устройств. Если вам нужно, к примеру, с одним устройством работать в режиме SPI, а с другим – в I2C, можно запустить два экземпляра программы и настроить режим для каждого устройства индивидуально.

Также в главном меню можно выбрать, с какой библиотекой работать: с оригинальной, которую можно скачать с сайта FTDI Chip, или с модифицированной. В оригинальной библиотеке в режиме SPI после того, как закончилась передача данных и деактивируется сигнал выбора ведомого CS, присутствует задержка около 2 мс. Это сделано разработчиками библиотеки libMPSSE.dll намеренно для исключения возможных проблем при сопряжении с медленными устройствами. В модифицированной мной версии библиотеки эта задержка убрана.

В оригинальной библиотеке libMPSSE.dll между окончанием передачи данных и деактивацией CS присутствует задержка
В оригинальной библиотеке libMPSSE.dll между окончанием передачи данных и деактивацией CS присутствует задержка

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

Выбор библиотеки libMPSSE.dll
Выбор библиотеки libMPSSE.dll

Программа запоминает, какую версию библиотеки следует использовать. При переключении библиотеки необходимо перезапустить программу.

В меню Справка можно ознакомиться с кратким описанием программы SPI via FTDI, а также прочитать datasheet на микросхемы FT2232H и FT2232D.

Главное меню программы «SPI via FTDI»: Справка
Главное меню программы «SPI via FTDI»: Справка
Работа с профилями SPI и I2C

Теперь программа SPI via FTDI поддерживает работу с профилями. Например, вы настроили режим работы, ввели команды и параметры записи в журнал для какого-то устройства. Чтобы быстро восстановить все эти настройки существуют профили. Новый профиль создаётся через меню Устройство — Запомнить конфигурацию или с помощью нажатия горячих клавиш Ctrl+S. Программа предложит ввести произвольное имя и сохранит профиль в конфигурационный файл.

Все сохранённые профили хранятся в одном файле и вызываются через меню Устройство — Восстановить конфигурацию или с помощью нажатия горячих клавиш Ctrl+O. При этом откроется окно со списком доступных конфигураций. Если выделить конфигурацию и нажать на кнопку "ОК", то программа восстановит настройки, присущие этой конфигурации.

Контекстное меню в окне доступных конфигураций программы "SPI via FTDI"
Контекстное меню в окне доступных конфигураций программы "SPI via FTDI"

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

Если в программе выбран режим SPI, то будут отображены только профили для режима SPI. Аналогично – для режима I2C.

Работа в режиме I2C

Программа поддерживает режим I2C. Вы можете выбрать одну из стандартных скоростей обмена из выпадающего списка, но также можете и ввести произвольную, там же в выпадающем списке. Значения скоростей приводятся в герцах и соответствуют режимам I2C:

  • Standard mode (100 000 Гц);
  • Fast mode (400 000 Гц);
  • Fast mode plus (1 000 000 Гц);
  • High speed mode (3 400 000 Гц).
Выбор скорости обмена по IIC
Выбор скорости обмена по IIC

Интересной особенностью является то, что в программе имеется сканер шины I2C. После нажатия на кнопку сканирования программа пытается обнаружить все подключённые ведомые устройства. Как мы знаем, на одной шине IIC могут находиться до 128-ми ведомых устройств (на самом деле меньше, т.к. 12 адресов являются зарезервированными). Программа пытается провести чтение или запись по каждому из адресов, и если на каком-то адресе получает ответ, то добавляет его в список найденных адресов. Рекомендую начинать работу со сканирования шины I2C.

Не все устройства могут быть обнаружены программой с первого раза. Некоторые устройства работают только на заданных скоростях, и при сканировании на другой скорости не будут обнаружены. Необходимо изучить технические описания на I2C устройства, с которыми собираетесь работать, чтобы знать, на какой скорости должен вестись информационный обмен.

Обратите внимание на схему подключения микросхем FTDI в качестве ведущего к шине I2C. Как видно из приведённой иллюстрации, выводы DI и DO микросхемы FTDI необходимо закоротить между собой:

Схема подключения FTDI и ведомых устройств к шине IIC
Схема подключения FTDI и ведомых устройств к шине IIC

В остальном процедуры чтения и записи аналогичны таковым в режиме SPI.

Чтение и запись данных (SPI/I2C)

Программа позволяет как передавать данные ведомым устройствам, так и запрашивать данные от них. Микросхема FTDI всегда «мастер».

При записи можно выбрать файл, который будет передаваться (кнопка с папкой), можно ввести команду (массив байтов в hex), а можно скомбинировать эти две возможности: если указана команда и выбран файл, то сначала отправится команда, а затем файл. Важным параметром является размер буфера записи. По умолчанию он задан 64 кб – размер максимально возможного аппаратного буфера микросхемы FT2232H. Если объём передаваемых данных превышает размер буфера, то данные будут передаваться частями. Если вы зададите размер буфера "1", то данные будут передаваться по одному байту, если укажете "10" – по десять байт. Каждая порция данных будет отправляться под своим «чип селектом».

Можно задать число повторов чтения. Если задано "0", то чтение будет повторяться бесконечно до принудительной остановки. Любые другие положительные значения определяют число повторений как есть.

При чтении задаётся размер буфера чтения. По сути, он равен числу байтов, которые нужно прочитать из ведомого устройства. Также имеется возможность отправки команды, которая задаётся как hex-массив. Некоторые устройства (как SPI, так и I2C), ожидают команды, прежде чем начнут отправлять данные. Например, это может быть адрес регистра, содержимое которого мы собираемся читать. Число повторов задаётся аналогично, как при записи.

Для просмотра принимаемых данных можно нажать кнопку с изображением таблицы, которая находится в поле чтения. Она обновляется при появлении новых данных в буфере, но не чаще, чем задано периодом обновления. Это ограничение введено для случаев, когда данные льются большим потоком: обновлять таблицу чаще нескольких раз в секунду бессмысленно.

Принимаемые данные можно сохранять в текстовый и/или двоичный файлы. Программа при записи всегда создаёт файл с неизменным названием (таким же, как название канала). Для переименования файла вручную можно воспользоваться соответствующим пунктом контекстного меню поля журнала. Переименовывать файл можно только после окончания записи.

В меню Файлы можно найти несколько полезных функций по работе с записанными данными.

Главное меню программы «SPI via FTDI»:  Файлы
Главное меню программы «SPI via FTDI»: Файлы

Для текстового файла можно задать число байтов, которые будут записаны в одну стоку. Это удобно, если, например, вы принимаете пакеты фиксированной длины. Тогда каждый пакет будет начинаться с новой строки. Выставление этого параметра – через кнопку с шестерёнкой в поле параметров чтения.

Специфика записи такова, что сначала программа пишет данные в свой программный буфер в памяти, и потом порциями сохраняет на диск. При этом приём данных может продолжаться. Сохранение может занимать время, особенно если был принят большой объём данных (десятки или сотни мегабайт). Необходимо дождаться оповещения об окончании сохранения, прежде чем переименовывать файл или закрывать программу. Такое решение используется для того, чтобы не терять данные при высоких скоростях обмена и больших объёмах данных. Например, возможны ситуации, когда вы должны непрерывно принимать данные в потоковом режиме на скорости 20 МГц на протяжении многих минут или часов. Программа позволяет использовать её таким образом.

Примеры использования программы SPI via FTDI

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

Первый пример – чтение по интерфейсу I2C регистра ID нашего старого знакомого – датчика давления BMP280. Здесь стоит обратить внимание на адрес устройства 119 (0x77) и на часть, относящуюся к чтению. Видно, что нужно поставить галку «Команда» и ввести в поле команды "D0". Как мы помним, это адрес регистра ID. Также следует задать размер буфера равным 1. Нажав кнопку «Прочитать», мы запишем в датчик BMP280 адрес регистра ID и затем запросим у датчика один байт из этого регистра.

Чтение регистра ID датчика BMP280
Чтение регистра ID датчика BMP280 с помощью FTDI

Некоторые устройства позволяют выполнять запись команды и чтение ответа не в едином цикле, как мы только что сделали, а разделять команду и ответ. Например, в данном случае можно было отправить команду "D0" в поле записи, нажав на кнопку «Записать», а в поле чтения команду не выставлять. Нажав на кнопку «Прочитать», мы бы получили точно такой же результат.

Следующий пример – чтение содержимого регистров таймера реального времени DS3231. На сей раз адрес ведомого равен 104 (0x68), команда равна "00", а запрашиваем мы 18 байтов: именно такого размера буфер у данного устройства.

Чтение содержимого регистров часов реального времени DS3231
Чтение содержимого регистров часов реального времени DS3231 с помощью FTDI

Последний пример с интерфейсом I2C – запись данных в ПЗУ 24C04 и чтение из него. Первым действием – из поля «Запись» – мы записываем в ячейку по адресу 0xF0 число 0xEE. Размер буфера здесь можно было задать 2, но можно оставить и так: всё равно будет передано только 2 байта. Далее в поле «Чтение» мы запрашиваем 256 байтов (полный размер данного ПЗУ), начиная с адреса "0". Обратите внимание, что в ячейке с адресом 0xF0 должно находиться число 0xEE, которое мы только что туда записали.

Чтение и запись данных в EEPROM 24C04 с помощью FTDI
Чтение и запись данных в EEPROM 24C04 с помощью FTDI

Следующий пример уже с интерфейсом SPI – чтение содержимого регистров цифрового акселерометра ADXL345 с помощью программы SPI via FTDI.

Чтение содержимого регистров цифрового акселерометра ADXL345
Чтение содержимого регистров цифрового акселерометра ADXL345 с помощью FTDI

Последний пример – запись и чтение ПЗУ 23LC1024 по интерфейсу SPI. Сначала (см. поле записи) мы запишем в ПЗУ команду "02 00 00 00 01". Здесь "02" – код команды «Запись» согласно даташиту, далее 3 нулевых байта – адрес ячейки памяти, и последний байт – "01" – значение, которое мы записываем в данную ячейку.

В поле чтения мы отправляем команду "03 00 00 00" и вычитываем буфер размером в 1 байт. Команда означает следующее: "03" – код команды «Чтение» согласно даташиту, далее 3 нулевых байта – адрес начальной ячейки, с которой начинаем читать. Но так как мы запрашиваем только 1 байт, то нам и вернётся значение, хранящееся по этому адресу, которое мы только что записали сюда и которое должно быть равно "01".

Чтение и запись данных в EEPROM 23LC1024 с помощью FTDI
Чтение и запись данных в EEPROM 23LC1024 с помощью FTDI
Управление портами общего назначения GPIO микросхемы FTDI (FT2232 и т.д.)

В меню Инструменты можно найти несколько полезных инструментов. В частности, для управления портами ввода и вывода общего назначения (GPIO). У микросхемы FTDI имеется по 8 таких ножек на каждый канал. В частности, двухканальная микросхема FT2232 имеет 16 ножек GPIO, а FT4232 – целых 32.

Виджет управления портами общего назначения GPIO микросхемы FTDI
Виджет управления портами общего назначения GPIO микросхемы FTDI

Управление заключается в том, что можно прочитать текущее состояние выводов, а можно записать в него 8-битное значение.

Соблюдайте осторожность, когда записываете данные в порт, если к нему подключено какое-либо устройство, т.к. подача высокого уровня на ножку, не предназначенную для этого, может повредить либо подключённому устройству, либо самой микросхеме FTDI.

Генератор прямоугольных импульсов, реализованный на микросхеме FTDI (FT2232 и т.п.)

Ещё одним полезным инструментом программы SPI via FTDI является генератор прямоугольных импульсов. Импульсы генерируются на выводе MOSI (DO) в режиме SPI. Можно настроить собственно частоту и скважность. По умолчанию используется частота 1000 Гц и скважность 0,5. Также можно поставить ограничение на число импульсов: если задано "0", то генерация происходит непрерывно до принудительной остановки, а если задать конкретное число, то генератор выдаст именно это число прямоугольных импульсов.

Настройки генератора прямоугольных импульсов в программе SPI via FTDI
Настройки генератора прямоугольных импульсов в программе SPI via FTDI

В основе работы генератора частоты лежит такая идея. Зная частоту шины SPI, мы можем рассчитать время передачи заданного числа 8-битных чисел. Пусть это будет периодом импульсов. А скважность мы будем задавать, передавая столько битов, равных "1", чтобы в отношении к общему числу передаваемых битов это равнялось значению скважности. Поясню на примере.

Будем использовать передачу 4-ёх байтов как один период. Тогда нам нужно выставить частоту шины SPI такой, чтобы эти 4 байта передались за время, равное одному периоду генератора. Так, если мы хотим получить частоту генератора 1 кГц, нужно выставить частоту SPI равной 1000(Гц)×4(байта)×8(бит)=32000 Гц.

Допустим, мы хотим получить скважность 0,5. Для этого мы будем передавать из этих четырёх байтов 2 равными 0xFF, а два других – нулевыми. В двоичном виде это будет 11111111_11111111_00000000_00000000. Последовательность единиц и будет нашим прямоугольным импульсом. Рисунок ниже иллюстрирует этот пример.

Генератор прямоугольных импульсов с помощью чипа FTDI
Генератор прямоугольных импульсов с помощью чипа FTDI

Здесь на линии DO частота генератора (1 кГц) со скважностью 0,5, а на линии SCL – частота шины SPI (32 кГц).

Данная функция хорошо работает до частоты примерно 5 кГц. На более высоких частотах генератор не держит частоту постоянной именно из-за программной природы своей реализации, т.к. небольшие задержки вносят существенный вклад в конечный результат. Также необходимо использовать модифицированную библиотеку libMPSSE.dll, о которой было написано выше.

Last modified onПятница, 04 Октябрь 2019 18:22 Read 6775 times

Поделиться

Print Friendly, PDF & Email

Leave a comment