|
LPC4337, DMA + SSP, В редких случаях приём не завершается полностью |
|
|
|
Feb 13 2018, 09:08
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Добрый день, коллеги! Есть связка на приём и передачу через SSP + DMA в упомянутом микроконтроллере. В некоторый момент при тестировании обнаружил, что иногда канал DMA оставляет 4 непринятых байта в регистре CONTROL в поле size. При этом контроллер DMA не выставляет ни одного флага ошибки. Соответственно бит ENABLE этого канала остаётся в единице.
Как устроены транзакции? Есть два канала dma. Канал 2 обслуживает передачу через SSP, канал 0 - приём через SSP (более приоритетный канал на приём). Далее, программируем одинаковое количество байт на передачу, соответственно и на приём тоже. Сначал включаем канал приёма. Затем - канал передачи, и именно по нему ждём завершения транзакции. Подразумевается, что канал приёма их завершит тоже, т.к. шина SSP - синхронная.
В целом всё работает. Запускаю циклический тест (на шине висит флешка). Флешку пишу и читаю из неё. Соответственно адреса буферов всегда одни и теже. На 1000, скажем, транзакций в очень редких случаях происходит описанная проблема.
Я уже умотался искать проблему. Несколько минимизировал её появление, установив burst size в 1 байт на приём и передачу. Если сделать 4 байта, то ошибка проявляется значительно чаще. Коллеги, я просто не понимаю источник ошибки, т.к. не один флаг не взводится. Флаги переполнения FIFO RX у SSP тоже обнулены. Из-за чего так может вести себя дмашник?
Что особенно печалит: я не могу воспроизвести ошибку, и нет флагов ошибки...
P.S. SSP - мастер. CS дёргаю программно, т.к. нужно выдерживать времянки.
P.S.S. 4 байта остатка вовсе не обязательно. Сейчас поймал 3 и 7. P.S.S.S. Есть зависимость от оптимизации компилятора. Можно сказать, что ошибка не появляется, или слииишком редка, если оптимизация 0. И чуть чаще на максимальном уровне оптимизации.
--------------------
Выбор.
|
|
|
|
Сообщений в этой теме
jcxz Цитата(haker_fox @ Feb 13 2018, 11:08) Сн... Feb 13 2018, 10:52 haker_fox QUOTE (jcxz @ Feb 13 2018, 18:52) Вроде д... Feb 13 2018, 12:30  jcxz Цитата(haker_fox @ Feb 13 2018, 14:30) ОК... Feb 13 2018, 12:38   haker_fox QUOTE (jcxz @ Feb 13 2018, 20:38) Потому ... Feb 13 2018, 12:53    jcxz Цитата(haker_fox @ Feb 13 2018, 14:53) Я ... Feb 13 2018, 13:19     haker_fox QUOTE (jcxz @ Feb 13 2018, 21:19) Она ещё... Feb 13 2018, 13:25      jcxz Цитата(haker_fox @ Feb 13 2018, 15:25) З.... Feb 13 2018, 13:45       haker_fox QUOTE (jcxz @ Feb 13 2018, 21:45) Поэтому... Feb 13 2018, 14:03        jcxz Цитата(haker_fox @ Feb 13 2018, 16:03) Чт... Feb 13 2018, 14:19         haker_fox QUOTE (jcxz @ Feb 13 2018, 22:19) И не за... Feb 13 2018, 14:34          jcxz Цитата(haker_fox @ Feb 13 2018, 16:34) Ну... Feb 13 2018, 16:07           haker_fox QUOTE (jcxz @ Feb 14 2018, 00:07) Если Вы... Feb 14 2018, 04:41            jcxz Цитата(haker_fox @ Feb 14 2018, 06:41) Сл... Feb 14 2018, 15:14             haker_fox QUOTE (jcxz @ Feb 14 2018, 23:14) Никак. ... Feb 15 2018, 00:13              jcxz Цитата(haker_fox @ Feb 15 2018, 02:13) Ст... Feb 15 2018, 09:00               haker_fox QUOTE (jcxz @ Feb 15 2018, 17:00) Драйвер... Feb 15 2018, 09:14                jcxz Цитата(haker_fox @ Feb 15 2018, 11:14) Сп... Feb 15 2018, 09:20                 haker_fox QUOTE (jcxz @ Feb 15 2018, 17:20) Возможн... Feb 15 2018, 10:06                  jcxz Цитата(haker_fox @ Feb 15 2018, 12:06) В ... Feb 15 2018, 10:57                   haker_fox QUOTE (jcxz @ Feb 15 2018, 18:57) Для это... Feb 15 2018, 13:07                    jcxz Цитата(haker_fox @ Feb 15 2018, 15:07) Да... Feb 15 2018, 13:16                     haker_fox QUOTE (jcxz @ Feb 15 2018, 21:16) SCLK? В... Feb 16 2018, 00:14                      jcxz Цитата(haker_fox @ Feb 16 2018, 02:14) Не... Feb 16 2018, 07:59 haker_fox P.S.S.S.
И всё-таки особенность есть. Я доделал в ... Feb 15 2018, 08:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|