Использование FT24C32A-ESR-T в Raspberry Pi HAT: Полное руководство

Raspberry Pi HAT (Hardware Attached on Top) — это стандарт для модульных плат, которые подключаются к Raspberry Pi и автоматически распознаются системой благодаря встроенной EEPROM (Electrically Erasable Programmable Read-Only Memory). В этой статье мы подробно рассмотрим микросхему FT24C32A-ESR-T, её подключение, настройку и использование в HAT, а также разберём, как она помогает Raspberry Pi определять и конфигурировать подключённые модули.

1. Что такое FT24C32A-ESR-T?

FT24C32A-ESR-T — это 32-килобитная (4 Кбайт) серийная EEPROM с интерфейсом I²C, выпускаемая компанией Fremont Micro Devices. Она идеально подходит для применения в Raspberry Pi HAT благодаря своей компактности, низкому энергопотреблению и совместимости с I²C-шиной Raspberry Pi.

Основные характеристики:
  • Объём памяти: 32 Кбит (4096 байт).
  • Организация памяти: 512 страниц по 8 байт (или 256 страниц по 16 байт в зависимости от режима).
  • Интерфейс: I²C (до 400 кГц в стандартном режиме, до 1 МГц в быстром режиме).
  • Напряжение питания: 1.8V–5.5V (совместимо с 3.3V, используемым в Raspberry Pi).
  • I²C-адрес: Базовый адрес 0x50 (1010xxx в бинарном виде), где последние три бита задаются пинами A2, A1, A0.
  • Время записи: ~5 мс на страницу.
  • Температура эксплуатации: -40°C до +85°C (версия ESR-T — расширенный температурный диапазон).
  • Эта микросхема часто используется в HAT для хранения идентификационных данных, которые Raspberry Pi считывает при загрузке.

2. Роль EEPROM в Raspberry Pi HAT

EEPROM в HAT выполняет функцию “цифрового паспорта”, позволяя Raspberry Pi автоматически распознавать подключённый модуль и настраивать его без вмешательства пользователя. Основные задачи:

  • Идентификация: Хранит информацию о производителе, модели и версии HAT.
  • Конфигурация: Содержит данные о настройке GPIO, загрузке драйверов и Device Tree Overlays (DTO).
  • Совместимость: Обеспечивает соответствие стандарту HAT, включая электрические и механические характеристики.
  • Защита: После записи данных защита от записи (через пин WP) предотвращает случайное изменение.

Что хранится в EEPROM?

Данные в EEPROM для HAT строго структурированы согласно спецификации Raspberry Pi Foundation. Обычно используется только первые 128–256 байт из доступных 4096 байт. Структура данных включает:

  1. Заголовок:
    • Сигнатура: 0xE0 0xAA (для распознавания HAT).
    • Версия формата: Например, 0x01.
    • Длина данных: Обычно 128 байт.
  2. Идентификатор:
    • Vendor ID (16 бит): Уникальный код производителя.
    • Product ID (16 бит): Код модели HAT.
    • Product Version (16 бит): Версия платы.
  3. Настройка GPIO:
    • Информация о пинах GPIO, их режиме (вход/выход) и состоянии по умолчанию.
  4. Драйверы:
    • Указания на модули ядра или DTO (например, dtparam=i2c_arm=on).
  5. Чековая сумма:
    • Для проверки целостности данных.

Raspberry Pi считывает эти данные по I²C-шине (адрес 0x50) при загрузке, после чего автоматически настраивает оборудование.


3. Подключение FT24C32A-ESR-T к Raspberry Pi

Для работы FT24C32A в составе HAT необходимо правильно подключить микросхему к Raspberry Pi. Вот типичная схема:

Схема подключения:

  • Pin 1 (A0), Pin 2 (A1), Pin 3 (A2): Адресные пины для задания I²C-адреса. Для HAT обычно подключаются к GND, что даёт адрес 0x50 (1010000).
  • Pin 4 (GND): Подключите к общей земле Raspberry Pi.
  • Pin 5 (SDA): Линия данных I²C. Подключите к SDA (GPIO 2 на Raspberry Pi).
  • Pin 6 (SCL): Линия синхронизации I²C. Подключите к SCL (GPIO 3 на Raspberry Pi).
  • Pin 7 (WP): Защита записи. Подключите к GND для разрешения записи или к VCC для блокировки (в HAT обычно переводят в VCC после записи данных).
  • Pin 8 (VCC): Подключите к 3.3V через фильтрующий конденсатор 100 нФ (между VCC и GND).

Дополнительно:

  • Подтягивающие резисторы: На линиях SDA и SCL должны быть резисторы 4.7kΩ к 3.3V. Raspberry Pi обычно имеет встроенные резисторы (1.8kΩ), но лучше проверить.
  • Напряжение: Используйте 3.3V, так как это стандарт для Raspberry Pi.

4. Чтение и запись данных в FT24C32A

FT24C32A взаимодействует с Raspberry Pi через I²C-шину. Для работы с ней можно использовать как командную строку, так и программное обеспечение (например, Python).

Подготовка:

  1. Включите I²C на Raspberry Pi:
    • Выполните sudo raspi-config, выберите “Interface Options” → “I2C” → включите.
    • Установите i2c-tools: sudo apt install i2c-tools.
  2. Проверьте наличие микросхемы:
    i2cdetect -y 1
    

    Вы должны увидеть адрес 0x50.

Чтение данных:

  • Для чтения одного байта:
i2cget -y 1 0x50 0x00

Здесь 0x00 — адрес памяти для чтения.

  • Для чтения всей памяти:
i2cdump -y 1 0x50

Пример на Python:

import smbus

bus = smbus.SMBus(1) # Номер шины I²C
address = 0x50 # Адрес микросхемы

def read_eeprom(address_byte):
    return bus.read_byte_data(address, address_byte)

# Чтение байта по адресу 0x00

data = read_eeprom(0x00)
print(f"Прочитано: {data}")

Запись данных:

Для записи необходимо, чтобы WP был подключён к GND.

Запись одного байта:

i2cset -y 1 0x50 0x00 0xAA

Здесь 0xAA — значение, которое записывается по адресу 0x00.

FT24C32A записывает данные постранично (по 8 байт). После каждой записи требуется задержка ~5 мс.

Пример на Python:

import smbus
import time

bus = smbus.SMBus(1) # Номер шины I²C
address = 0x50 # Адрес микросхемы

def write_eeprom(address_byte, data):
    bus.write_byte_data(address, address_byte, data)
    time.sleep(0.005) # Задержка 5 мс

# Запись байта 0xAA по адресу 0x00
write_eeprom(0x00, 0xAA)
print("Данные записаны")

5. Изменение I²C-адреса

FT24C32A позволяет менять I²C-адрес с помощью пинов A2, A1, A0. Базовый адрес — 0x50 (1010xxx), где последние три бита задаются пинами:

  • A2, A1, A0 = 000 → 0x50.
  • A2, A1, A0 = 001 → 0x51.
  • A2, A1, A0 = 010 → 0x52.
  • … до 111 → 0x57.

Для HAT стандартный адрес — 0x50 (все пины на GND). Если вам нужно использовать другой адрес (например, для нескольких устройств на одной шине), измените состояние A2, A1, A0, подключив их к VCC (1) или GND (0). После изменения проверьте новый адрес с помощью i2cdetect -y 1.


6. Создание HAT ID с использованием FT24C32A

Чтобы ваш HAT был распознан Raspberry Pi, нужно записать в EEPROM структурированные данные:

Получите Vendor ID: Зарегистрируйтесь у Raspberry Pi Foundation.

Создайте eeprom.bin:

  • Начните с сигнатуры 0xE0 0xAA.
  • Укажите Vendor ID, Product ID, Product Version.
  • Добавьте настройки GPIO и драйверов.
  • Завершите чековой суммой.

Запишите данные:

i2cset -y 1 0x50 0x00 < eeprom.bin

Заблокируйте запись: Переведите WP в VCC.

Проверьте: Перезагрузите Raspberry Pi и выполните:

vcdbg log msg

7. Заключение

Микросхема FT24C32A-ESR-T — это надёжное и простое решение для реализации HAT ID в проектах с Raspberry Pi. Благодаря её поддержке I²C, совместимости с 3.3V и большому объёму памяти (для задач HAT), она идеально подходит для хранения идентификационных данных. Правильное подключение, настройка адреса и запись данных в EEPROM позволяют создать полностью совместимый HAT, который Raspberry Pi распознает автоматически, обеспечивая удобство и функциональность для пользователей.

Если вы разрабатываете свой HAT, FT24C32A станет отличным выбором для хранения конфигурации. Следуйте спецификации Raspberry Pi, и ваш модуль будет работать как официальный HAT!