Me enfrento a un problema en el que tenemos un flash SPI NOR conectado a un adaptador Intel I210 PCIe-ethernet en una placa personalizada basada en Cortex A9. Normalmente, el adaptador Ethernet utiliza el flash SPI para guardar los datos de configuración y el binario del firmware, pero en este momento está vacío, en cuyo caso las herramientas ARM que proporcionó Intel no pueden tocar el flash externo SPI, y nuestro chip Ethernet ahora se encuentra allí. hacer algo útil.
Después de buscar en la hoja de datos del chip Intel, me di cuenta de que hay un registro con un desplazamiento de dirección 0x1201C llamado "FLA", y algunos bits de este registro se corresponden con los pines sclk, miso, mosi y de selección de esclavos del SPI. destello. La hoja de datos recomienda que, con un chip de memoria flash vacío, el host deba enviar comandos de bit a bang al SPI flash para habilitar la escritura a través de otros canales. Pensé que este sería un enfoque más prometedor que tratar de transferir los controladores y herramientas x86 de Intel a nuestro tablero.
Mi problema es que, dado que el flash SPI funciona a una velocidad de reloj mucho más lenta que la del bus PCIe, ¿cómo me aseguro de que las señales de selección de esclavo y mosi lleguen con suficientes tiempos de configuración y retención relativos a sclk?
Decir, si la selección de esclavos baja en una operación de escritura de memoria y pulso el reloj en la siguiente, ¿la infraestructura PCIe da alguna garantía sobre el tiempo entre los paquetes que llegan? ¿Garantizará que el paquete que contiene la selección de esclavos llegue antes que el que contiene el borde ascendente de sclk? ¿Está utilizando nanosleep () para intentar agregar un retraso entre ellos un enfoque razonable, por ejemplo?
Siento que he malinterpretado algunas cosas y lo estoy haciendo de manera incorrecta. ¿Cómo se hace este tipo de acceso de bit banging para asegurar que se cumplan las restricciones de tiempo?