Consideración de diseño: Cortex M0 frente a Cortex M4 para aplicaciones de IoT [cerrado]

1

Estoy diseñando un dispositivo IoT con muchos sensores que se integrarán mediante interfaces seriales como UART, SPI, I2C, etc. Para las capacidades de comunicación, planeo usar Wi-Fi (IEEE 802.11). ¿Tiene sentido usar algo como SoC Wi-Fi de Atmel y ARM SAM D21 Cortex-M0 + MCU o usar Cortex M4 de Atmel y luego integre un módulo WiFi utilizando SPI o UART (no es una solución SoC).

  • Si voy con la opción M0, tengo la ventaja de Wifi y MCU en un solo chip.
  • Con M4, tendré que integrarlos juntos usando alguna interfaz serial. Pero la ventaja es un procesador más rápido.

Como tengo muchos periféricos a bordo, ¿tiene sentido usar una CPU Cortex M4 que es mucho más rápida y capaz?

Editar : Estoy seguro de que esto es basado en la opinión. Pero estoy buscando algunas entradas de diseño válidas que me ayuden a tomar esta decisión. Por ejemplo,

  • Planeo integrar un almacenamiento SD, un reloj en tiempo real, una serie de sensores: temperatura, energía, etc. La cantidad de periféricos puede ser de 10 a 12. Todos integrados a través de UART, SPI e I2C. También planeo tener comunicación: Wifi, RF, GSM, Ethernet, etc.

  • No necesito ninguna capacidad matemática hardcore. La unidad de FPU sería agradable pero no obligatoria.

Lo que estoy buscando son respuestas a preguntas como -

  1. ¿Tener muchos periféricos significa que necesito un dispositivo más grande y más rápido?         ¿procesador? Sé que esto puede ser manejado por ATMega. Yo estaba usando un 8         Un poco de ATMega para algo similar. Funcionó. Pero me mudo a una plataforma más grande con más periféricos.
  2. Va a ser más grande Procesador como M4 y M7 me ayudan a manejar operaciones sensibles al tiempo ¿Como RF, WiFi y comunicación de sensores?
  3. ¿Cómo se elige uno basado en principios de diseño válido? ¿Hay un conjunto de reglas?
  4. ¿Es más fácil trabajar con una velocidad de procesador, RAM y Flash más rápida cuando cambio entre diferentes periféricos?

También: soy ingeniero eléctrico con habilidades de programación integrada amateur / decente. No es el mejor, pero decente.

    
pregunta am3

2 respuestas

2

Para responder de manera resumida a tus puntos centrales;

Al manejar la comunicación con dispositivos periféricos, lo más importante es seleccionar el procesador correcto con el soporte correcto para los buses de hardware que está utilizando. Hay muchas formas de hacer muchos tipos de comunicación, pero la mayoría de los elementos habilitados para SPI de los que debería preocuparse, ya que un aficionado con cierta experiencia estará en el rango de SPI de 10 a 20MHz como máximo.

Eso significa que su periférico SPI registrará un byte por cada 20 ciclos de reloj de núcleo en una CPU de 48MHz en los momentos de mayor actividad. En un entorno interrumpido bien diseñado que es más que suficiente si no está haciendo grandes cantidades de enmascaramiento, desplazamiento, adición y división en cada byte individual, para cada byte individual.

Además, ir a 80MHz no te ayudará significativamente allí si comienzas a chocking.

Por lo tanto, es mucho mejor encontrar un procesador con un buen soporte para la administración periférica, como un sistema DMA / uDMA que se pueda usar para grandes transferencias y un buen FIFO de hardware, si es posible, que contenga al menos 4 bytes de datos. (2 palabras de 16 bits, o 1 qword de 32 bits, o solo 4 bytes), para que pueda generar valores int32 de forma masiva.

Lo que más te ayudará con las consideraciones en tiempo real es entender cómo funcionan las interrupciones y cómo usarlas de manera eficiente sin bloquear grandes cantidades de tiempo de procesador. Después de todo, mientras que el periférico en serie está sincronizado o en datos a unos pocos MHz, su núcleo no debe hacer nada al respecto, siempre que elija el controlador correcto con el tipo de soporte de hardware adecuado.

La cantidad de RAM interna (o RAM externa paralela rápida, pero en serio, no quiere comenzar a pensar en eso en este momento de su 'carrera') que necesitará, será determinada por la cantidad de datos que generará una cosa en el tiempo otra cosa necesita manejar la salida de ella. Si se asegura de que su tubería de salida (¿probablemente WiFi?) Sea rápida y sus sensores generen un orden de magnitud menos datos, no necesitará tanta RAM siempre que administre bien el flujo. Si creas paquetes de datos de 5kB cuyo inicio depende del final a través de tu propio diseño estúpido, necesitarás más RAM que cuando lo haces para que no haya dependencia fuera de los bloques de 512 bytes (o menos).

Una velocidad de núcleo más rápida no te ayudará mucho si lo único que estás haciendo es mover algunos bytes alrededor de cada interrupción que recibas. Si necesita SPI de súper alta velocidad (que el módulo WiFi probablemente no admita si es asequible de todos modos) necesita un procesador con un reloj periférico de alta velocidad y controladores de pines de E / S de alta capacidad y baja capacitancia, en lugar de de uno con un núcleo rápido.

Parafraseando de forma anecdótica: ahora estoy usando un procesador M4 para hacer algo que se podría haber hecho con un Atmega de 20MHz, si no fuera por el hecho de que la interfaz del bus especificada por Numbskull necesita una velocidad muy alta. Bit-Banging y los FPGA no son una opción en este diseño. Entonces, estoy ingresando, digamos 5 Mbps de datos y generándolos a través de periféricos estándar como I2C y SPI, y todo se descodifica, se matifica y lo que no, pero el 70% del tiempo mi núcleo hace algo que golpea la entrada de 5 Mbps y decide rápidamente en las decisiones de bit a bit. Quítatelo y podría haber elegido al menos un MPU 8 veces más barato. Porque casi todo lo demás es una interrupción y un hardware en el que el núcleo no hace absolutamente nada.

    
respondido por el Asmyldof
1

Creo que m4 sería mejor, ya que el reloj de la CPU es mucho más rápido, puedes ahorrar energía (lo que creo que es un factor importante en IOT) al pasar rápidamente al modo de suspensión. Además, la integración mediante la interfaz en serie no es un problema, la utilidad debe ser un problema en la consideración del diseño. Además, está usando M0 + no M0, M0 + fue diseñado para aplicaciones de baja potencia en mente. Sin embargo, si está buscando algo elegante, le recomendaría que eche un vistazo a la corteza M4f. pero le he dado una descripción general para alguien que está dispuesto a dar el paso como un interés.

Pero como señaló @Asmyldof, hay muchos factores que pueden afectar sus decisiones de diseño. Por lo tanto, sería mejor que los finalice antes de seleccionar la MCU que elija ...

    
respondido por el fazkan

Lea otras preguntas en las etiquetas