Доступ к GPIO через /dev/mem безопаснее?

Я делаю проект, в котором переключение gpio должно быть быстрым, например, со скоростью 40 МГц. Я проверил с интерфейсом «sysfs», и скорость переключения составляет около 300 Гц. В нашем случае это вообще неприемлемо. Итак, на некоторых форумах я читал, что использование доступа к /dev/mem увеличивает скорость переключения. Я использовал /dev/mem и добился скорости 30-32MHz и нас это устраивает. Теперь проект отправляется на полевые испытания, не вызовет ли он каких-либо проблем, таких как сбой ядра, что-то подобное в долгосрочной перспективе.


person seereddi sekhar    schedule 28.02.2017    source источник
comment
Как мы можем сказать, не видя кода?   -  person followed Monica to Codidact    schedule 28.02.2017


Ответы (1)


Насколько мне известно, i.mx6 не имеет функции атомарной установки/сброса контактов, поэтому вы должны убедиться, что все выходные контакты GPIO контролируются вашим приложением, ни ядро, ни другой процесс никогда не должны пытаться изменить какой-либо вывод. контакт на том же контроллере GPIO. Чтение входных контактов или назначение некоторых контактов другим периферийным устройствам должно быть в порядке, но всегда следите за тем, чтобы за кулисами не происходило битового взрыва (например, некоторые драйверы SPI думают, что они лучше знают, когда устанавливать или сбрасывать CS, и тихо устанавливают контакт CS). к выходу GPIO, убирая его от периферийного устройства SPI)

Вы можете поддерживать эту скорость вывода, пока ваш процесс не прерывается. Если вы не отключите прерывания, вы получите сбои в выводе. Если вы это сделаете, планировщик ядра и аппаратные драйверы, управляемые прерываниями, перестанут работать. В двухъядерной или четырехъядерной системе должна быть возможность зарезервировать ядро ​​для исключительного использования вашим процессом и позволить остальной системе работать на другом ядре (ядрах). Не отключайте прерывания вслепую, а используйте sched_setaffinity(2) и параметр ядра isolcpus.

person followed Monica to Codidact    schedule 28.02.2017
comment
Я уверен, что не использую контроллер GPIO нигде, кроме как в /dev/mem. - person seereddi sekhar; 02.03.2017