Usar el encabezado de Raspberry Pi Gpio como interfaz de memoria asignada

3

Raspberry Pi es realmente un dispositivo interesante por su compatibilidad con tantas funciones en un formato tan pequeño y simple. Si se puede acceder al encabezado de expansión GPIO de la misma manera que en una interfaz normal asignada en memoria, más proyectos podrán usarlo Como plataforma de desarrollo. Algunas preguntas con respecto a esto:

  1. ¿Se pueden agregar los pines GPIO en el encabezado en una sola instrucción de acceso a la memoria en su hardware (chip)? Si no es así (supongo), ¿se puede conectar alguna placa / circuito de expansión al conector para modificar el comportamiento de modo que pueda admitir dicho método de acceso? ¿Cómo ves tal diseño?

  2. Si todo esto parece imposible o demasiado complicado, veo que una solución viable es envolver el acceso en una biblioteca o capa de abstracción. ¿Ha existido este tipo de trabajo? ¿Hay algún trabajo similar? No estoy viendo el acceso del usuario, estoy pensando en algún tipo de biblioteca del kernel que facilite el desarrollo de controladores de nivel de kernel basados en R-Pi.

Gracias de antemano por sus comentarios.

    
pregunta minghua

2 respuestas

3

La Raspberry Pi expone 17 pines GPIO en P1, y la placa Rev. 2 expone 4 más en P5. Estos pines no se pueden usar directamente como un bus de E / S mapeado en memoria, como podría haber encontrado en un sistema antiguo basado en un microprocesador.

Supongo que podrías golpear un bus de este tipo, pero el número limitado de pines sería un problema. Por ejemplo, podría definir un bus de datos de 8 bits, un flash de lectura, un flash de escritura y utilizar los 7 (u 11) bits restantes como un bus de direcciones. Sin embargo, dado que los bits GPIO disponibles no son secuenciales, el funcionamiento sería lento; el controlador en el RPi tendría que establecer y borrar bits individualmente.

Un mejor enfoque sería utilizar los buses I2C y / o SPI (serie) que están disponibles en el encabezado P1 para implementar memoria externa y / o E / S asignadas a la memoria.

    
respondido por el Dave Tweed
2

En realidad, puede hacer E / S basadas en memoria, simplemente eche un vistazo al ejemplo de WiringPI en enlace .

Sin embargo, hay algunas advertencias, tienes que abrir el dispositivo /dev/mem , lo que significa que debes ser root. Sé que hay algunas personas que planean crear un dispositivo especial /dev/gpio-mem para hacer que solo esta parte del espacio de direcciones sea accesible (para un usuario / grupo con menos privilegios).

Para ver el código real que ya lo hace, eche un vistazo a Wiring Pi ( enlace ) o LogAn ( enlace ).

LogAn lee todos los pines GPIO en un solo acceso a la memoria: ya se usó para depurar / diagnosticar el protocolo SPI en el RPI (consulte enlace ). Tenga en cuenta que Pinokia utiliza E / S basadas en memoria para escribir en los pines.

Para ejemplos de tableros que hacen un uso extensivo del GPIO, consulte el Gertboard ( enlace ) y PiFace ( enlace ).

    
respondido por el luismreis

Lea otras preguntas en las etiquetas