-
- В продолжение темы. Когда изделие уже готовилось к выпуску первой
партии в продажу, вдруг обнаружился неприятный баг. С вероятностью
примерно 10% при включении устройство начинало принимать помехи.
Разбирался почти неделю. Оказалось, что не все так просто с высокой
скоростью захвата данных с пинов через DMA. Корректный захват
возможен лишь с частотой не менее, чем в 4,5 раза ниже частоты
ядра. Иначе DMA вываливает ошибку переполнения (overrun DMA) и
данные имеют пропуски. my504(687 знак., 13.11.2021 15:03)
- У проца/камня нет команды типа кортексового WFI? В смысле "замереть
до поступления прерывания"? - LightElf(13.11.2021 16:58)
- Нет такой инструкции. Однако я полагаю, что инструкции не
обращающиеся к шине памяти эквивалентны останову ядра с точки
зрения контроллера DMA. Проблема в данном случае, я так думаю, в
самой диаграмме транзакций. Видимо они 4-цикловые и нет никакой
конвейеризации. При 4 кратном понижении частоты реквестов DMA
против частоты ядра еще возникают гонки и вываливается overrun. А
ниже я смотрел только когда в 4,5 раза ниже ядра и тогда overrun
пропадает совсем. Думаю, что и 4,1 my504(16 знак., 13.11.2021 17:08)
- А камень-то какой? У тех же старших STM на шине кросс-коммутатор
висит, обращения к разным блокам ОЗУ друг другу не мешают вообще,
может и тут чего подобное можно замутить? - LightElf(13.11.2021 17:24)
- dsPIC33CH512MP208. Двухядерный. Все происходит в Slave-ядре, которое ничем кроме описываемого процесса не занимается. Асинхронный к этому процессу обмен с внешним миром и прочие ништяки - это Master-ядро. Ну и кросс-коммутатор не гарантирует одноцикловость транзакций в ОЗУ. Я еще раз повторю, думаю, что дело не в занятии шины. Опять же говорить сейчас про STM32 - это грязно насмехаться над собеседником. )))) Чур меня от STM. Года на два минимум. А там посмотрим. ;-) - my504(13.11.2021 17:48)
- А камень-то какой? У тех же старших STM на шине кросс-коммутатор
висит, обращения к разным блокам ОЗУ друг другу не мешают вообще,
может и тут чего подобное можно замутить? - LightElf(13.11.2021 17:24)
- Нет такой инструкции. Однако я полагаю, что инструкции не
обращающиеся к шине памяти эквивалентны останову ядра с точки
зрения контроллера DMA. Проблема в данном случае, я так думаю, в
самой диаграмме транзакций. Видимо они 4-цикловые и нет никакой
конвейеризации. При 4 кратном понижении частоты реквестов DMA
против частоты ядра еще возникают гонки и вываливается overrun. А
ниже я смотрел только когда в 4,5 раза ниже ядра и тогда overrun
пропадает совсем. Думаю, что и 4,1 my504(16 знак., 13.11.2021 17:08)
- Спасибо, интересно. - Evgeny_CD(13.11.2021 15:25)
- Спасибо - MBedder(13.11.2021 15:14)
- У проца/камня нет команды типа кортексового WFI? В смысле "замереть
до поступления прерывания"? - LightElf(13.11.2021 16:58)
- Да, разводку чипа по корпусу там делают спецыально обученные
наркоманы. - mse homjak(20.05.2021 13:32)
- Полагаю, что порт Е является вспомогательным. Он имеется только у
80-пинового корпуса и почти ни с чем не объединен. - my504(20.05.2021 13:35)
- Не... Там не только "порт Е". У ПИСК32, например, практически любую
периферию нужно собирать по четырём сторонам, вперемешку. Особенно
пикантно выглядит внешняя шина или Эзернет. - mse homjak(20.05.2021 13:41)
- У STM также. Все размазано тонким слоем - LightElf(20.05.2021 15:08)
- Мы уже обсуждали эту мою жалобу. В итоге нашли какой-то китайский
проц, у которого 16 разрядов порта подряд идут. Но только один
проц. Другие все шалят. - Kpoк(20.05.2021 16:00)
- Не шалят, а троллят перфекционистов. SciFi(1 знак., 20.05.2021 16:27, картинка)
- только младший байт порта А лежит ровненько подряд. :-) - Лaгyнoв(20.05.2021 15:36)
- все плисоводы смотрят на эти ваши проблемы с недоумением ))) - Mahagam(20.05.2021 16:04)
- В данном случае решалась очень частная и нишевая задача. В общем
случает разряды портов не подряд не имеют никакого значения. - my504(20.05.2021 16:23)
- К числу "частных пищевых задач" так же относятся быстрый ЦАП и ЖКИ - Kpoк(20.05.2021 22:22)
- А разряды внешней памяти? А RMII, растащенный на три стороны проца? - LightElf(20.05.2021 16:40)
- Пижоны! - Kpoк(20.05.2021 16:16)
- В данном случае решалась очень частная и нишевая задача. В общем
случает разряды портов не подряд не имеют никакого значения. - my504(20.05.2021 16:23)
- все плисоводы смотрят на эти ваши проблемы с недоумением ))) - Mahagam(20.05.2021 16:04)
- Мы уже обсуждали эту мою жалобу. В итоге нашли какой-то китайский
проц, у которого 16 разрядов порта подряд идут. Но только один
проц. Другие все шалят. - Kpoк(20.05.2021 16:00)
- У STM также. Все размазано тонким слоем - LightElf(20.05.2021 15:08)
- Не... Там не только "порт Е". У ПИСК32, например, практически любую
периферию нужно собирать по четырём сторонам, вперемешку. Особенно
пикантно выглядит внешняя шина или Эзернет. - mse homjak(20.05.2021 13:41)
- Полагаю, что порт Е является вспомогательным. Он имеется только у
80-пинового корпуса и почти ни с чем не объединен. - my504(20.05.2021 13:35)
- В продолжение темы. Когда изделие уже готовилось к выпуску первой
партии в продажу, вдруг обнаружился неприятный баг. С вероятностью
примерно 10% при включении устройство начинало принимать помехи.
Разбирался почти неделю. Оказалось, что не все так просто с высокой
скоростью захвата данных с пинов через DMA. Корректный захват
возможен лишь с частотой не менее, чем в 4,5 раза ниже частоты
ядра. Иначе DMA вываливает ошибку переполнения (overrun DMA) и
данные имеют пропуски. my504(687 знак., 13.11.2021 15:03)