Копирование данных из внешней памяти через SPI - Скорость

Кажется, что никакого опыта недостаточно, чтобы ответить на те странные проблемы, которые возникают в шинах последовательной связи. Мы пытаемся реализовать копирование данных с внешней флэш-памяти в SRAM. Ниже приведены подробные сведения о том, как мы настроили нашу систему.

  1. Контроллер: RH850 (D1M1), скорость PLL на 60 МГц
  2. Внешняя вспышка (IS25LP128)
  3. Скорость SPI: 5 МГц (часы наблюдаются с помощью осциллографа)
  4. Размер данных: 4 МБ

Теоретически, если мой SPI работает на частоте 5 МГц, он должен копировать 5 Мбит / с. Мы пытаемся скопировать 4 МБ, так что по сути это будет 32 мегабита. Так что теоретически наша передача должна занять около 7 секунд. Хорошо, у нас есть некоторые накладные расходы. Мой код драйвера может принимать только до 64 КБ на вызов чтения, поэтому мы решили скопировать 40 КБ примерно 100 раз, чтобы добиться этого, и мы запускаем это в цикле for .. Хорошо, позвольте мне добавить 5 секунд накладных расходов (извините, RH850!) итого 12 секунд; Что ж, давайте добавим еще немного буфера и сделаем его зоной комфорта в 15 секунд (ожидаемый максимум!). Но затем, когда мы запускаем код, на завершение копирования уходит целых 40 секунд. Мы проверили часы, и они составляют 5 МГц, как и ожидалось, и, по крайней мере, они работают непрерывно.

Кто-нибудь здесь сталкивался с этим? Куда мы можем заглянуть? Хорошо, я знаю, что у меня есть какой-то флэш-драйвер, предоставленный моим поставщиком, но прежде чем я это сделаю, я хотел убедиться! Любая помощь будет очень признательна.

1 ответ

На первый взгляд, я могу подумать как минимум о 10 вещах, которые могут быть ответственны за это. В одном я уверен, это сложная проблема. Не существует простого «однострочного решения». Главный подозреваемый - то, что не твое: прошивальщик. Итак, выделяйте «кусочки» одну за другой и проверяйте их, начиная снизу. Есть операционная система? DMA используется? Проблема с памятью или арбитражем / совместным использованием ресурсов? Прерывания используются или опрашиваются? Выполняются какие-либо задания с более высоким приоритетом? Данные читаются из регистров или из отображенной памяти? Драйвер использует стандартное периферийное устройство SPI или специальную последовательную вспышку (я не знаю RH850, у некоторых uC он есть)?
Ваш пост недостаточно точен, поэтому, возможно, эти вопросы вам помогут. Что бы я сделал? Мой собственный водитель!

Другие вопросы по тегам