Você não especificou um chip, o seguinte é voltado principalmente para os dispositivos atmega de 8 bits, mas são informações gerais. Leia a seção 'Programação de memória' para obter a folha de dados de seu chip específico para obter informações mais específicas!
Dito isto, e como você disse, todos os dispositivos AVR contêm dois bits de bloqueio denominados LB1 e LB2. A programação destes (a 0, baixo) adicionará proteção ao conteúdo gravado nas memórias Flash e EEPROM, de acordo com a tabela abaixo. O nível de proteção é dividido em três modos, onde o modo 1 não oferece proteção e o modo 3 oferece proteção máxima. É possível mudar para um modo de proteção mais alto simplesmente reprogramando os bits de bloqueio.
O AVR permite alterar os bits "altos" para "baixos", mas não o contrário. Não é possível alterar um bit de trava "baixo" para "alto", portanto, não é possível diminuir o nível de proteção. Para limpar os bits de bloqueio, é necessário apagar um chip completo, o que apaga a memória Flash.
Esses 2 bits de bloqueio sozinhos (LB1 e LB2) quando baixos impedirão que 99,9% das pessoas roubem seu firmware! Provavelmente mais de 99,9%. Quase sempre seria mais fácil fazer engenharia reversa do seu código.
Portanto, não há como permitir que o usuário atualize o firmware pelo gerenciador de inicialização personalizado e proteja o flash da leitura ao mesmo tempo?
De acordo com o meu conhecimento (eu poderia estar enganado, mas acho que já teria tido um problema com isso antes) em dispositivos com fusíveis de proteção do carregador de inicialização (BLB12 e BLB11), você pode bloquear sua seção do carregador de inicialização personalizado , desativar a SPI e ser protegido de 97-98% das pessoas.
No entanto, quando nenhum dos bits de bloqueio está programado, não há recursos de bloqueio de memória ativados !!! A desativação do ISP é suficiente para bloquear 70% das pessoas.
Para obter mais informações, os bits e os fusíveis de bloqueio não estão localizados no flash normal ou no espaço EEPROM, nem são acessíveis a partir do software, exceto os bits de bloqueio relacionados ao carregador de inicialização em dispositivos com o recurso de auto-programação. A tabela 2 nesta nota do aplicativo o ajudará a identificar o que você pode fazer pelo seu dispositivo em particular!
A linha AVR da Atmel não é um dispositivo de alta segurança (a menos que seja explicitamente indicado!) E, como tal, eles absolutamente não vêm com nenhuma garantia de segurança de código, nem deveriam! Como todos os dispositivos não seguros (e infelizmente alguns seguros), eles são propensos a ataques comuns!
Editar
Vou colocar o cabeçalho da interface de programação HV a bordo. Mas alguém pode usar o programador HV para ler o flash? Eu sei que o programador HV pode apagar o chip, mesmo o ISP / Jtag está desativado.
Não acho que você deva incluir o programador de alta tensão no design de sua placa, a menos que seja absolutamente necessário e saiba com certeza que isso não causará problemas com nada. Os programadores de alta tensão (sinais de 12 volts) estão disponíveis apenas como medida de segurança para programar chips bloqueados (principalmente bloqueados por erro). Em teoria, isso serve apenas para programar o dispositivo para não ler nada. E nunca ouvi falar de uma façanha que permitisse a leitura.
Para atualizar o carregador de inicialização (ocasionalmente), colocarei o cabeçalho da interface de programação HV a bordo. Mas alguém pode usar o programador HV para ler o flash? Eu sei que o programador HV pode apagar o chip, mesmo o ISP / Jtag está desativado.
Eu acho que pode haver uma maneira de atualizar o flash bloqueado através do carregador de inicialização (algo a ver com um sinalizador interno de gravação e / ou ISR, talvez ???). Não poderei fazer isso por ~ 20 horas; por isso, recomendo fazer uma nova pergunta focada apenas nisso e no processador que você mencionou. É uma pergunta muito boa !