SPI на F4

AG123
Пт, 5 мая 2017 г. 15:12
Из чистого любопытства я посмотрел в раздел SPI в справочном руководстве RM0009 для F4
http: // www.ул.com/content/ccc/resource/ ... 031020.PDF
Справочное руководство VS RM0008 для F1*
http: // www.ул.com/content/ccc/resource/ ... 171190.PDF

Есть много частей, которые выглядели буквально «идентичны», как я надеялся, что зрители PDF могут сделать «разницу» и просто сказать мне, в чем разногласия : D

Я отметил следующее как 1 разница:
STM32F1 RM0008 P710 25.3.3 Настройка SPI в главном режиме 25.3.3 Настройка SPI в главном режиме
Процедура
1. Выберите BR [2: 0] биты, чтобы определить скорость последовательного часового боля (см. Регистр SPI_CR1).
2. Выберите биты CPOL и CPHA, чтобы определить одну из четырех отношений между передачей данных и последовательными часами (см. Рисунок 239).
3. Установите бит DFF для определения 8- или 16-битного формата кадров данных
4. Настройте бит LSBFIRST в регистре SPI_CR1, чтобы определить формат кадра.
5. Если контакт NSS требуется в режиме ввода, в аппаратном режиме подключите контакт NSS к сигналу высокого уровня во время полной последовательности передачи байта. В программном режиме NSS установите биты SSM и SSI в регистре spi_cr1. Если вывод NSS требуется в выходе
Режим, должен быть установлен только бит SSOE.
6. Должны быть установлены биты MSTR и SPE (они остаются установлены, только если подключен штифт NSS
к сигналу высокого уровня). В этой конфигурации PIN -код MOSI является выходом данных, а вывод мисо - это вход данных.
STM32F1 RM0009 P887 28.3.3. Настройка SPI в главном режиме 28.3.3. Настройка SPI в главном режиме
В главной конфигурации последовательные часы генерируются на штифте SCK.
Процедура
1. Выберите BR [2: 0] биты, чтобы определить скорость последовательного часового боля (см. Регистр SPI_CR1).
2. Выберите биты CPOL и CPHA, чтобы определить одну из четырех отношений между передачей данных и последовательными часами (см. Рисунок 248). Этот шаг не требуется, когда выбран режим Ti.
3. Установите бит DFF для определения 8- или 16-битного формата кадров данных
4. Настройте бит LSBFIRST в регистре SPI_CR1, чтобы определить формат кадра. Этот шаг не требуется, когда выбран режим Ti.
5. Если контакт NSS требуется в режиме ввода, в аппаратном режиме подключите контакт NSS к сигналу высокого уровня во время полной последовательности передачи байта. В программном режиме NSS установите биты SSM и SSI в регистре spi_cr1. Если вывод NSS требуется в режиме вывода, следует установить только бит SSOE. Этот шаг не требуется, когда выбран режим Ti.
6. Установите бит FRF в SPI_CR2, чтобы выбрать протокол TI для последовательной связи.
7. Должны быть установлены биты MSTR и SPE (они остаются установленными, только если контакт NSS подключен к сигналу высокого уровня).
Конфигурация PIN -код MOSI - это выход данных, а вывод мисо - это вход данных.
Хотя это вряд ли будет единственной разницей, что кажется довольно отчетливой, так это добавление «режима Ti»
Диаграмма синхронизации приведена по протоколу P887 RM0009 SPI TI в главном режиме
Очевидно, что «режим Ti», казалось, имел такие вещи, как «запускающий край» и «край отбора проб», и, похоже, он начинается с одиночной последовательности High Pulse NSS
Другая «странная» вещь об этой диаграмме времени протокола P887 RM0009 SPI TI - это, кажется, называет MOSI как «вход», в то время как MISO как «вывод», похоже, не соответствует понятиям того, как мы обычно делаем SPI, так как STM32 «Мастер» (казалось больше погрешности на диаграмме)
Мои мысли на шаге (6) выше, нам нужно * отключить режим Ti, чтобы получить «обычную» SPI, мы ожидаем
В частности, если мы используем штифт NSS в качестве настраиваемого штифта /CS для устройств SPI (я всегда делаю это, чтобы не «тратить») выводы :ржу не могу:
Но затем по умолчанию для SPI_CR2 FRF при сбросе, кажется, 0 режим Motorola (а не 1 режим Ti)

всего 2 цента

AG123
Пт, 5 мая 2017 г. 15:37
Нет, это не кажется значимой разницей, так как режим TI отключен по умолчанию

STM32 также используйте те же граничные адреса и адреса регистра для SPI1 и SPI2, SPI3
0x4001 3000 - 0x4001 33ff spi1
0x4000 3800 - 0x4000 3bff spi2/i2s
0x4000 3C00 - 0x4000 3fff spi3 / i2s3

Стивестронг
Пт, 5 мая 2017 г. 15:38
AG123 написал:По умолчанию для SPI_CR2 FRF при сбросе, кажется, 0 Motorola Mode (а не 1 режим Ti)

AG123
Пт 5 мая 2017 г., 15:44
Я начинаю подозревать, может ли это быть что -то, связанное с часами AHB / Прескалерами или APB Clocs / Prescalers
Поскольку после всех F4 работает на 168 МГц, в то время как F1 работает на уровне 72 МГц, много вещей, которые нужно выследить, чтобы выяснить различия, особенно если что -то не работает

Режим Ti, казалось, состоит в том, что дополнительное использование штифта NSS, на основе RM, выключен по умолчанию, а режим Motorola используется вместо этого

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

Нашел сеть, которая казалась полезной по теме часов
https: // stm32f4-discovery.net/2015/01/p ... X-Devices/
Настройки, кажется, соответствуют, которые используются на черной ветви Steves F4, множители PLL казались похожими
https: // github.com/stevstrong/arduino_s ... CF4.C#L431 void SetupClock168MHz() { ... // save bus clock values rcc_dev_clk_speed_table[RCC_AHB1] = (SystemCoreClock/1); rcc_dev_clk_speed_table[RCC_APB2] = (SystemCoreClock/2); rcc_dev_clk_speed_table[RCC_APB1] = (SystemCoreClock/4);

Стивестронг
Пт, 5 мая 2017 г. 18:11
Хорошие новости, это начало работать с кодом Libmaple, область применения показывает импульсы SPI_CLK (SPI3), и он больше не замораживает.
Теперь нужно определить, какие из моих изменений сделали это.
Больше впереди.

michael_l
Пт, 5 мая 2017 г., 8:09 вечера
Стивестронг написал:Хорошие новости, это начало работать с кодом Libmaple, область применения показывает импульсы SPI_CLK (SPI3), и он больше не замораживает.
Теперь нужно определить, какие из моих изменений сделали это.
Больше впереди.

Стивестронг
Солнце 07 мая 2017 г. 15:22
Фактические значения скамейки с использованием бета SDFAT, SPI3 21MHZ, без DMA, карта: 16 ГБ Sandisk Ultra Class 10: Type any character to start FreeStack: 117044 Type is FAT32 Card size: 15.93 GB (GB = 1E9 bytes) Manufacturer ID: 0X3 OEM ID: SD Product: SL16G Version: 8.0 Serial number: 0X72F2CA43 Manufacturing date: 8/2015 File size 5 MB Buffer size 512 bytes Starting write test, please wait. write speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 375.32,122150,759,1363 387.66,18954,1021,1319 Starting read test, please wait. read speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 945.83,1574,529,540 946.01,1071,529,540 Done

AG123
Солнце 07 мая 2017 г. 16:41
+5 Хороших достижений : D

Скорость написания, кажется, достигла нативной ограничивающей скорости SD, для скорости чтения, я думаю, что если используется больший буфер E.глин. 1k, это может сузить разницу настолько, что DMA не будет иметь слишком много разницы

Стивестронг
Солнце 07 мая 2017 г., 17:39
Кажется, что размер буфера 4096 или 8182 является лучшим вариантом, если оперативная память (см. Таблицу следующего поста).

Стивестронг
Солнце 07 мая 2017 г. 22:20
Я завершил таблицу с результатами скамейки, используя SPI = 42 МГц, все без DMA.
stm32_sd_performance.jpg
stm32_sd_performance.JPG (162.89 киб) просмотрено 921 раза

AG123
Пн, 8 мая 2017 г. 8:46 утра
Улучшение скоростей записи действительно драматично до 4к, 8K : D

Стивестронг
Пн, 8 мая 2017 г. 8:50 утра
Да, если вы зарезервируете буфер 32K для этого...
Но даже с буфером 8K он дает хорошую скорость.

Пито
Пн, 8 мая 2017 г. 8:56 утра
Sdbench с F4 должен дать вам ~ 4.5 МБ/сек rd/wr @42mhz SPI Clock и Sdfatex с 512bytes Большой буфер и DMA на..
Sdbench с F1 должен дать вам ~ 3.5 МБ/с RD/WR @36 МГц SPI Clock и SDFATEX с 512BYTES Большой буфер и DMA ON..

Стивестронг
Пн, 8 мая 2017 г. 9:02 утра
Пито, бывший не принесла никакого улучшения.

Я не вижу, как увеличить скорость RD/WR в 10 раз превышает скорость RD/WR...
Можете ли вы намекнуть на любое решение?

Пито
Пн, 8 мая 2017 г. 9:05
Вы должны включить SDFATEX в SDFATCONFIG.час.
Опять же, приведенные выше результаты реальны..

Стивестронг
Пн, 8 мая 2017 г. 9:07
Не могли бы вы опубликовать свой тестовый эскиз + используемый Core + SDFAT lib?

О, и пришлите мне аналогичную карту, которую вы используете :)
Кстати, какой цвет - твоя карта Сэмми? красный или желтый/оранжевый?

Пито
Пн, 8 мая 2017 г. 9:23
Sdbench из последнего SDFAT - это эскиз.
Карты, которые я использовал,:
1. Samsung Evo 8GB, CL10 UHS -I (белый/оранжевый) - Работы 21, 36, 42 МГц
2. Sandisk Ultra 16 ГБ, CL10 (красный/серый) - Работы 21, 36 МГц
Если вы не получите такие результаты (плюс минус 0.2 МБ/сек), тогда это что -то не так с вашей настройкой/настройками/драйвером SPI_DMA..
Те же результаты, которые я получаю с ядром Даниэля, и с Libmaple.
С SDFATEX использовать 512Bytes Большой буфер.

Стивестронг
Пн, 8 мая 2017 г. 9:24 утра
Вот почему я прошу вас опубликовать свою установку, чтобы иметь возможность воспроизводить ваши результаты.
Вы также можете отправить мне файлы bin для синих таблеток и/или Maple Mini и/или Black F4 + указывать используемые булавки SPI и CS для каждой платы частично.

Пито
Пн, 8 мая 2017 г. 9:45 утра
Попробуйте - Maplemini, CS = PB12, SPI1, 36 МГц, USB Serial, Bootloader20, Sdfatex, DMA, 512Bytes Большой буфер

Вы должны получить что -то вроде: File size 5 MB Buffer size 512 bytes Starting write test, please wait. write speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 3533.34,25083,136,143 3594.74,15522,136,141 Starting read test, please wait. read speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 3257.12,1548,155,156 3258.89,1359,155,156 Done Type any character to start

Стивестронг
Пн, 8 мая 2017 г., 11:33
В чем причина не использовать F407 Black SPI1 с 42 МГц?

Пито
Пн, 8 мая 2017 г., 11:45
Попробуйте с 21, и когда в порядке, вы получите 42 :)
К вашему сведению - задержка MIN - это время, когда вам нужно перенести 512bytes на SDCARD. Из вышеупомянутых результатов:
136US/512/8 = 33.2ns -> 30 МГц
207US/512/8 = 50.5NS -> 19.8 МГц

Стивестронг
Пн, 8 мая 2017 г. 16:07
Pito, я пропутал корзину F4 на моей черной плате F407Ve с утилитой STLINK от 0x80000000, но не имею реакции на интерфейсе серийного 1 (PA9/10).

Я также заметил, что корзина F1 Bin имеет 38 КБ, в то время как корзина F4 имеет большие 28 КБ (меньше, чем кор1 bin). Это действительно так, как это должно быть?

РЕДАКТИРОВАТЬ
Прошивая ММ над DFU: >maple_upload.bat COM3 2 1EAF:0003 sdbench_f1.bin maple_loader v0.1 Resetting to bootloader via DTR pulse Reset via USB Serial Failed! Did you select the right serial port? Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming... Searching for DFU device [1EAF:0003]... Found it! Opening USB Device 0x1eaf:0x0003... Found Runtime: [0x1eaf:0x0003] devnum=1, cfg=0, intf=0, alt=2, name="STM32duino bootloader v1.0 Upload to Flash 0x8002000" Setting Configuration 1... Claiming USB DFU Interface... Setting Alternate Setting ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing Transfer Size = 0x0400 bytes_per_hash=761 Starting download: [##################################################] finished! state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present error resetting after download: usb_reset: could not reset device, win error: The system cannot find the file specified. Done! Resetting USB to switch back to runtime mode

victor_pv
Пн, 8 мая 2017 г. 16:55
Стивестронг написал: Я также заметил, что корзина F1 Bin имеет 38 КБ, в то время как корзина F4 имеет большие 28 КБ (меньше, чем кор1 bin). Это действительно так, как это должно быть?

Пито
Пн, 8 мая 2017 г. 16:56
F4 Bin, который я вижу, здесь 28 КБ. Serial1 установлен, и я вижу OUPTUT, как указано выше на PA9/PA10, 115K2 8N1..
Я снова перекомпилировал это с
Файл: Sdbench.бин
CRC-32: EB38F0D4
MD4: 4D43BE8AA4F0F8AD05D059F6E981FAD2
MD5: 5AEC1C4ACFB959F8C81E480981836786
SHA-1: E7B93691E776F2DF4012B1713380DF174948B589
Sdbench.rar
(18.25 киб) скачано 17 раз

Стивестронг
Пн, 8 мая 2017 г., 17:00
HM, такая же неудача с новым корзином тоже:
Ничего на сериале 1...

Шнур...T, это была свободная проволока, извините.

Какой из них CS PIN? PB6? FreeStack: 128032 Can't access SD card. Do not reformat. No card, wrong chip select pin, or SPI problem? SD errorCode: 0X20,0XFF

Стивестронг
Пн, 8 мая 2017 г., 17:09
На PB6 я получаю импульсный поезд (такси сигнал) с ~ 330 кГц...

Пито
Пн, 8 мая 2017 г., 17:16
PB6 - CS CARD. SPI равен 3,4,5.

Стивестронг
Пн, 8 мая 2017 г., 17:19
PB3,4,5 является альтернативной группой PIN -PIN SPI1.
На PB6, как сказано, я получаю такси сигнал..

Где PB4 на черной доске?

Пито
Пн, 8 мая 2017 г., 17:22
Ты спрашиваешь меня? У меня нет твоей черной доски VE, моя доска - Zet.

Пито
Пн, 8 мая 2017 г., 17:50
Это для F1 (здесь 103Zet) SPI на PA5,6,7 и CS = PC4, 36 МГц, серийный 115K2 на PA9,10, MapleBootloader20. Предыдущая версия была построена с Libmaple, это с ядром Даниэля. Он не ждет Чар, он работает в петле.
Sdbench_f1.rar
(17.86 киб) скачано 15 раз

Стивестронг
Пн, 8 мая 2017 г. 18:22
ОК, вернемся к F4, я могу подтвердить результаты, успешные с первым корзином F4 от Pito: File size 5 MB Buffer size 512 bytes Starting write test, please wait. write speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 2397.93,19155,207,212 2399.08,16532,207,212 2412.97,15940,207,211 Starting read test, please wait. read speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 2446.03,1590,208,208 2447.22,972,208,208 2447.22,972,208,208 Done

Стивестронг
Пн, 8 мая 2017 г., 22:15
Кажется, что я неправильно использовал функциональность SDFatex до сейчас - извините, пито за вводящую в заблуждение информацию со стороны : oops:
Я понял, что этого недостаточно, чтобы установить в sdfatconfig.час, #define ENABLE_EXTENDED_TRANSFER_CLASS 1

Стивестронг
Ср 10 мая 2017 г., 17:15
Горячие новости :!:

Скамейка для черного f4 @ 168mhz, spi1 @ 21mhz, с DMA, SDFATEX, SANDISK ULTRA 16 ГБ, CL10 (красный/серый): File size 5 MB Buffer size 512 bytes Starting write test, please wait. write speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 2438.87,13975,204,208 2446.03,14013,204,208 Starting read test, please wait. read speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 2499.84,1448,203,204 2501.09,909,203,204

Пито
Пт 12 мая 2017 г., 17:44
К вашему сведению - Blue F103ZET, Sandisk Ultra 16GB Red/Grey, SPI @44MHZ (88 МГц FCPU Clock), последний SPI от Victor, Sdfatex, короткие провода <10 см. File size 5 MB Buffer size 512 bytes Starting write test, please wait. write speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 4393.39,7474,112,114 4328.73,10052,112,116 4378.00,7742,112,115 Starting read test, please wait. read speed and latency speed,max,min,avg KB/Sec,usec,usec,usec 3887.78,975,129,130 3887.78,836,129,130 3890.80,835,129,130

Стивестронг
Пт 12 мая 2017 г. 18:10
Какой «последний SPI от Виктора» вы имеете в виду? Общая версия?

Ваши результаты F1 выглядят очень близко, чтобы быть пропорциональными моими, которые были сделаны при 36 МГц:
44 МГц/36 МГц = 1.222
Скорость WR: (мой результат) 3.7 * 1.22 = 4.5, ваш результат ~ 4.4
Rd Speeed: (мой результат) 3.38 * 1.22 = 4.1, ваш результат ~ 3.9

Подобная пропорциональность достигается для F4 @ 42 МГц Ворчащий Скорость: ~ 4.6.
Мне интересно, что F4 Rd Результат больше не пропорционален, ~ 4.8 на ~ 20% выше, чем F1 работает с использованием одной и той же карты, хотя код SPI для F4 очень похож на код F1.
Я могу только думать, что разница в том, что CPU Clock.

Пито
Пт 12 мая 2017 г. 18:13
Victor's STM32GENERIER. Все еще думаю, почему чтения с F1 такие медленные..

Стивестронг
Пт 12 мая 2017 г. 18:20
Скорость RD выше скорости WR также @ 21 МГц для F4 (что, кстати, выглядит логично для меня)...
Так что это кажется общей разницей/проблемой где -то.

Пито
Пт 12 мая 2017 г. 18:35
Интересно, что я не могу заставить Samsung Evo работать на F407 42 МГц с новейшим родовым SPI от Victor. В прошлом он работал с его общим ядром на 42 МГц, так как я много испытал. Теперь обоих Samsung и Sandisk выбрасывают ошибки на 42 МГц.. :?

Стивестронг
Пт 12 мая 2017 г. 18:53
В конечном итоге вы можете попробовать файл корзины, который я приложил в одном из предыдущих постов (SPI1: PA4..7, USB -сериал).

Стивестронг
Сб 13 мая 2017 г. 12:19
Пито написал:Все еще думаю, почему чтения с F1 такие медленные..

AG123
Сб 13 мая 2017 г. 13:23
F1 на APB2 Пробегает на 72 МГц, следовательно, SPI доставит 36 МГц, если это так, в то время как на F4 это 42 МГц и 21 МГц на автобусе SPI, что казалось бы немного «странным» в том смысле, что это подразумевает SD -карты быстрее на F1 будет работать быстрее на F1. «Секрет» может быть тем, что ускоритель «искусства», который, возможно, делает несколько циклов нулевых состояний ожидания на F4 :ржу не могу:

Ядро F401 ветвь на GitHub SheepDoll