¿Mi SAMD21 está bloqueado debido a una configuración incorrecta del reloj del software?

1

Uso un SAMD21 sin un cristal externo, usando su oscilador interno de 32 kHz y lo transformo con DFLL a 48 MHz.

El procesador se despierta normalmente con GCLK0 en 1 MHz, así que primero activo GCLK1 con 32 kHz, le enciendo el procesador para que pueda apagar y reconfigurar GCLK0 a DFLL 48 MHz, y luego volver a encender el procesador a GCLK0. (este es el mismo método que usa el Arduino Zero, con la única excepción de que usa el resonador externo de 32k, mientras que yo uso el interno)

Ahora tengo GCLK0 ejecutándose en 48 MHz y manejando la CPU. También uso el reloj genérico 2 en 1 MHz para PWM, UART y otras cosas. Hasta ahora tan bueno. Lo depuro con SWD, con el uso de una placa XPlained Pro donde el microcontrolador se ha quitado y las líneas de SWD van directamente a mi placa.

Todo funcionó bien. Hasta que quise configurar el reloj genérico 3.

REG_GCLK_GENCTRL = 0x000003;  // disable gclk3 to allow changes
REG_GCLK_GENDIV = 0x000103;   // set division to 1
REG_GCLK_GENCTRL = 0x010603;  // activate gclk3 with 8 MHz

Después de cargar el software, el microcontrolador dejó de responder y ya no puedo acceder a él a través de SWD. Tenía una tabla de repuesto, y también la probé tontamente. Lo mismo sucedió.

El error dice

  

error: no se pudo activar la interfaz, pero se encontró un DAP con ID 0x ....

Sugiere borrar el flash y nombra el sueño profundo como una posible causa. Puedo borrar el flash con éxito. Sin embargo, ninguna otra operación es posible.

Mi primera suposición fue que, de alguna manera, arruiné la configuración del reloj, la CPU necesita un reloj en marcha para poder acceder a través de SWD, y no puede hacerlo por falta de un resonador. Así que saqué el resonador del XPlainedPro y lo instalé en mi tablero de la misma manera que estaba en el XPlainedPro, incluido su condensador.

No resolvió mi problema.

He visto este error en algunos subprocesos, pero generalmente se trata de que JTAG no funciona mientras SWD continúa funcionando.

¿Existe una forma de guardar mis controladores o están bloqueados?

    
pregunta vsz

1 respuesta

1

No tengo experiencia con los dispositivos SAMD, pero desde mi experiencia con otros controladores diría:

Si hubiera borrado el flash con éxito, no habría ningún programa para configurar los relojes, por lo que el dispositivo sería accesible después de un ciclo de encendido. Dudo que hayas eliminado el flash.

En casos especialmente difíciles (una vez que deshabilité los pines SWD accidentalmente como primera instrucción en mi controlador), la conexión del pin de reinicio a la interfaz de depuración generalmente ayuda, ya que a menudo hay una opción llamada "conectar bajo reinicio" o algo así. Luego, el depurador utilizará el pin de reinicio para ingresar al dispositivo, incluso si el software que se ejecuta en él lo impida de otra manera.

Tenga en cuenta que es importante que el depurador tenga control sobre la línea de reinicio, ya que solo mantenerlo en reinicio evitará que el controlador se ejecute. Dependiendo de la rapidez con la que su programa llegue al punto de bricking, puede salirse con una buena sincronización entre el lanzamiento manual de reinicio y hacer clic en conectar en la PC, pero eso generalmente es muy inconsistente.

Sidenote:

REG_GCLK_GENCTRL = 0x000003;
REG_GCLK_GENDIV = 0x000103;
REG_GCLK_GENCTRL = 0x010603;

¿Quién diablos se supone que entiende lo que estás tratando de hacer aquí? Utilice valores predefinidos para configurar valores de registro para hardware. Algo parecido a GCLK_GENCTRL_GCLK3EN o lo que sea lo hará mucho más comprensible. No voy a buscar todos esos bits con los que te estás metiendo. Esto introduce un infierno de posibles errores porque un pequeño error de cambio causará un desastre.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas