Raspberry Pi es realmente un dispositivo interesante por admitir tantas funciones en un factor de forma tan pequeño y simple. Si se puede acceder al encabezado de expansión GPIO de la misma manera que a una interfaz mapeada en memoria normal, más proyectos podrán usarla como plataforma de desarrollo. Algunas preguntas al respecto:
¿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 ser compatible con dicho método de acceso? ¿Cómo ves un diseño así?
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 ese tipo de trabajo? ¿Hay algún trabajo similar? No estoy mirando el acceso a la zona de usuario, estoy pensando en algún tipo de biblioteca de kernel que facilite el desarrollo de controladores de nivel de kernel basados en R-Pi.
Gracias de antemano por sus comentarios.
El 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 microprocesador.
Supongo que podría hacer un bit-bang en un bus de este tipo, pero el número limitado de pines sería un problema. Podría, por ejemplo, definir un bus de datos de 8 bits, una luz estroboscópica de lectura, una luz estroboscópica de escritura y usar los 7 (u 11) bits restantes como un bus de direcciones. Sin embargo, dado que los bits GPIO disponibles no son secuenciales, su funcionamiento sería lento; el controlador en el RPi tendría que establecer y borrar bits individualmente.
Un mejor enfoque sería usar 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.
En realidad, puede realizar operaciones de E/S basadas en la memoria, solo eche un vistazo al ejemplo de WiringPI en http://elinux.org/RPi_Low-level_peripherals .
Sin embargo, hay algunas advertencias: debe abrir el /dev/mem
dispositivo, lo que significa que debe ser root. Sé que hay algunas personas que planean crear un /dev/gpio-mem
dispositivo especial para 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 hace esto, eche un vistazo a Wiring Pi ( https://projects.drogon.net/raspberry-pi/wiringpi/ ) o LogAn ( https://github.com/r42/logan ).
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 (ver https://github.com/R42/pinokia ). Tenga en cuenta que Pinokia usa E/S basadas en memoria para escribir en los pines.
Para ver ejemplos de placas que hacen un uso extensivo de GPIO, consulte Gertboard ( http://www.element14.com/community/docs/DOC-51726?ICID=hp-gertboard-banner ) y PiFace ( http:// uk.farnell.com/jsp/search/productdetail.jsp?SKU=2218566&MER=baynote-2218566-pr ).
PedroJ
minghua
PedroJ
minghua