Загрузчик для SPI NOR Flash одноплатного ПК OrangePi Zero2


  Intro     SPL     Shell     Env     FDT     USB     Net       SPI    

Работа с последовательным ПЗУ (SPI Flash)

В оболочке U-Boot для работы с SPI Flash предназначена команда sf.

Команда sf используется для доступа к флэш-памяти SPI, поддерживает чтение, запись, стирание и некоторые другие функции.

Help этой команды выглядит так:


=> help sf
sf - SPI flash sub-system

Usage:

  • sf probe [[bus:]cs] [hz] [mode] - init flash device on given SPI bus and chip select

  • sf read addr offset|partition len - read 'len' bytes starting at 'offset' or from start of mtd 'partition'to memory at 'addr'

  • sf write addr offset|partition len - write 'len' bytes from memory at addr to flash at 'offset' or to start of mtd 'partition'

  • sf erase offset|partition [+]len - erase 'len' bytes from 'offset' or from start of mtd 'partition' +'len' round up 'len' to block size

  • sf update addr offset|partition len - erase and write 'len' bytes from memory at 'addr' to flash at 'offset' or to start of mtd 'partition'

  • sf protect lock/unlock sector len - protect/unprotect 'len' bytes starting at address 'sector'
    =>
  • probe

    Флэш-память должна быть сначала проверена с помощью sf probe, прежде чем можно будет использовать любую другую подкоманду. Все параметры являются необязательными:

    bus - номер шины SPI, содержащий чип SPI-flash, например 0. Если вы не знаете номер, вы можете использовать «dm uclass», чтобы увидеть все устройства spi, и проверить значение «seq» для каждого из них (здесь 0 и 2):


    uclass 89: spi 0 spi@0 @ 05484960, seq 0 1 spi@1 @ 05484b40, seq 2

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

    hz - скорость (тактовая частота) шины SPI в герцах. Обычно это значение по умолчанию равно 100000, то есть 100 кГц, что очень медленно. Обратите внимание, что если устройство существует в дереве устройств, там может быть указана скорость, и в этом случае этот параметр игнорируется.

    mode - режим использования SPI (0-3):
    0 CPOL=0, CPHA=0
    1 CPOL=0, CPHA=1
    2 CPOL=1, CPHA=0
    3 CPOL=1, CPHA=1

  • Clock phase (CPHA) - фаза тактового сигнала
  • Clock polarity (CPOL) - полярность тактового сигнала, управляет состоянием холостого хода

    CPHA = 0 - данные передаются (выборка) по переднему фронту тактового сигнала

    CPHA = 1 - данные передаются (выборка) по заднему фронту тактового сигнала

    CPOL = 0 — низкий уровень, CPOL = 1 — высокий уровень

    Другие параметры:

  • addr - адрес в оперативной памяти для начала передачи
  • offset - смещение в флэш-памяти для начала передачи
  • partition - если параметр не является числовым, предполагается, что он является описанием раздела в формате ,, который здесь не рассматривается. Для этого требуется сборка с CONFIG_CMD_MTDPARTS
  • len - количество байтов для передачи

    Read

    sf read используется для чтения из флэш-памяти SPI в память. Чтение завершится ошибкой, если будет предпринята попытка чтения за пределами флэш-памяти.


    Write

    sf write используется для записи из памяти во флэш-память SPI. Флэш-память SPI должна быть стерта в первую очередь, так как в противном случае результат не будет определен. Запись завершится ошибкой, если будет предпринята попытка записи за пределами флэш-памяти.


    Erase

    sf erase используется, чтобы стереть область флэш-памяти SPI. Стирание не удастся, если какая-либо часть стираемой области защищена или находится за концом флэш-памяти. Также может произойти сбой, если начальное смещение или длина не выровнены по области стирания (например, 256 байт).


    Update

    sf update используется для автоматического стирания и обновления области флэш-памяти SPI из ореративной памяти. Это работает по секторам за раз (обычно 4 КБ или 64 КБ). Для каждого сектора сначала проверяется, есть ли в этом секторе правильные данные. Если да, то он пропускается. Если нет, то сектор стирается и записываются новые данные. Обратите внимание, что если длина не кратна размеру стирания, пространство после данных в последнем секторе будет стерто. Если смещение не начинается в начале блока стирания, операция завершится ошибкой.


    Protect

    Микросхемы SPI-Flash часто имеют функцию защиты, при которой микросхема разделена на области, которые можно заблокировать или разблокировать. С помощью sf protect эти настройки можно изменить, если они поддерживаются драйвером.

  • lock | unlock - выбирает блокировку или разблокировку секторов
  • sector - номер начального сектора для блокировки/разблокировки. Это может быть смещение в байтах или другое значение, в зависимости от чипа.
  • len - количество байтов для блокировки/разблокировки


    Test

    Удобная и быстрая подкоманда sf test позволяет проверить, работает ли память SPI Flash должным образом. Это работает в четыре этапа:

    • erase - стирает всю область
    • check - проверяет, что регион стерт
    • write - записывает в регион тестовый паттерн, состоящий из кода U-Boot
    • read — считывает тестовый шаблон, чтобы проверить, правильно ли он написан

    Память выделяется для двух буферов, каждый размером байт. Типичный размер составляет от 64 КБ до 1 МБ. Смещение и размер должны быть выровнены по границе стирания. Обратите внимание, что этот тест не будет пройден, если какая-либо часть флэш-памяти SPI защищена от записи.

    Примечание. В данной версии U-Boot sf help не показывает наличие sf test, видимо, эта функция здесь не реализована, т.к. её выполнение прямо из SPI приведет к затиранию загрузчика.






  •   Intro     SPL     Shell     Env     FDT     USB     Net       SPI