No especificó un chip, lo siguiente está orientado principalmente a los dispositivos atmega de 8 bits, pero es información general. ¡Lea la sección 'Programación de memoria' para la hoja de datos de su chip específico para obtener información más específica!
Dicho esto, y como dijiste, todos los dispositivos AVR contienen dos bits de bloqueo llamados LB1 y LB2. La programación de estos (a 0, bajo) agregará protección a los contenidos escritos en las memorias Flash y EEPROM de acuerdo con la tabla a continuación. El nivel de protección se divide en tres modos, donde el modo 1 no ofrece protección y el modo 3 ofrece la máxima protección. Es posible pasar a un modo de protección superior simplemente reprogramando los bits de bloqueo.
El AVR permite cambiar bits "altos" a "bajos", pero no al revés. No es posible cambiar un bit de bloqueo "bajo" a "alto", por lo que no es posible reducir el nivel de protección. Para borrar los bits de bloqueo, se requiere un borrado de chip completo, que borra la memoria Flash.
¡Estos 2 bits de bloqueo solos (LB1 y LB2) cuando están bajos evitarán que el 99.9% de las personas roben su firmware! Probablemente más del 99.9%. Casi siempre sería más fácil aplicar ingeniería inversa a su código.
Entonces, ¿no hay forma de permitir que el usuario actualice el firmware mediante un cargador de arranque personalizado y proteja el flash de la lectura al mismo tiempo?
Hasta donde sé (podría estar equivocado, pero creo que habría tenido problemas con esto antes) en dispositivos que tienen fusibles de protección del cargador de arranque (BLB12 y BLB11), puede bloquear su sección de cargador de arranque personalizado , deshabilitar SPI y ser protegido del 97-98% de las personas.
Sin embargo, cuando ninguno de los bits de bloqueo está programado, no hay funciones de bloqueo de memoria habilitadas. La desactivación del ISP solo es suficiente para bloquear al 70% de las personas.
Para obtener información adicional, los bits de bloqueo y los fusibles no se encuentran en el espacio normal de flash o EEPROM, ni son accesibles desde el software, a excepción de los bits de bloqueo relacionados con el cargador de arranque en dispositivos con la función de autoprogramación. ¡La Tabla 2 en esta nota de la aplicación lo ayudará a identificar lo que puede hacer para su dispositivo en particular!
La línea AVR de Atmel no son dispositivos de alta seguridad (¡a menos que se indique explícitamente!) Y, como tales, ¡no vienen con ninguna garantía de seguridad de código, ni deberían hacerlo! Como todos los dispositivos no seguros (y lamentablemente incluso algunos seguros), ¡son propensos a ataques comunes!
Editar
Pondré el encabezado de la interfaz de programación HV a bordo. ¿Pero alguien puede usar el programador de HV para LEER el flash? Sé que el programador de HV puede borrar el chip incluso si el ISP / Jtag está deshabilitado.
No creo que deba incluir el programador de HV en el diseño de su placa a menos que sea absolutamente necesario y sabe con certeza que no causará problemas con nada. Los programadores de HV (señales de 12 voltios) están disponibles solo como medida de seguridad para programar chips bloqueados (error bloqueado, principalmente). En teoría, esto solo está destinado a programar el dispositivo para que no lea nada. Y nunca he oído hablar de una hazaña que permita leer.
Para actualizar el gestor de arranque (ocasionalmente) pondré el encabezado de la interfaz de programación HV a bordo. ¿Pero alguien puede usar el programador de HV para LEER el flash? Sé que el programador de HV puede borrar el chip incluso si el ISP / Jtag está deshabilitado.
Creo que puede haber una manera de actualizar el flash bloqueado a través del cargador de arranque (¿algo que tenga que ver con un indicador de escritura interno y / o ISR tal vez?) Pero tendré que buscar mis notas y tal vez deba probarlo. No podré hacer esto por ~ 20 horas; así que recomiendo hacer una nueva pregunta centrada solo en esto y para el procesador que mencionaste. ¡Es una muy buena pregunta !