Programação PIC através de FPGA

9

Gostaria de saber se existe uma maneira de programar um PIC pela primeira vez (gravação em Flash) através de uma placa FPGA.

O PIC já está soldado ao FPGA e não consigo removê-lo. Não existe nenhum carregador de inicialização no PIC. Portanto, preciso programá-lo no modo USART / SPI / I2C com um gerenciador de inicialização para que ele possa receber dados do FPGA.

Sei que normalmente tenho que dessoldá-lo, conectá-lo a um programador de hardware como o PICKit e programá-lo com um software no computador como o MPLAB, mas não posso pagar por isso.

Posso gerar o carregador de inicialização com o MPLAB, que é um arquivo .hex, mas como posso transferi-lo para o FPGA e depois para o PIC através dos pinos do FPGA?

O PIC usado é o Microchip PIC12F1822.

Myst
fonte
2
Apenas verificando: você pode reprogramar o FPGA (ou seja, você tem todas as ferramentas necessárias para fazer isso)?
pjc50
Isso é algum tipo de placa de desenvolvimento?
Matt Young
Sim, eu tenho todas as ferramentas necessárias para reprogramar o FPGA (ele está conectado ao computador através de USB padrão).
Myst
11
Não, eles foram culpados porque não fizeram esse esforço. Na verdade, estou em um estágio e achei isso muito pouco profissional. Embora eu ainda precise resolver o problema. Realmente não consigo ver uma maneira de reprogramar esse PIC com outras maneiras além de um programador externo que não posso usar porque o pacote já está pronto.
Myst
2
Não há como soldar alguns fios de jumper em traços ou pinos no PIC para que você possa programá-lo através de um programador externo? Tentar fazê-lo através do FPGA parece um projeto de tese de graduação.
precisa

Respostas:

10

Não, você não precisa, na verdade, não pode usar SPI, UART ou I 2 C para programar o PIC. A única maneira de obter um novo programa em um PIC que não tenha um código especial carregado para esse fim (um carregador de inicialização) é usar a interface de programação de hardware externa. Eletricamente, isso significa conectar-se a Vss, MCLR, PGC e PGD. Pode ser útil ter o programador também conectado ao Vdd, mas não é necessário para esse chip, desde que o nível de Vdd seja conhecido e o programador ajustado de acordo.

A interface de hardware de baixo nível é bastante simples. PGD ​​é a linha de dados, que é amostrada pelo PIC na borda descendente do PGC (a linha do relógio). Para colocar o PIC no modo de programação em primeiro lugar, uma chave especial de 32 bits é sincronizada em relação às bordas específicas do MCLR (embora veja a nota abaixo sobre a programação de alta tensão).

O protocolo de nível superior fica mais complicado. A maioria das coisas é feita com comandos de 6 bits, alguns dos quais são seguidos por palavras de dados de 14 bits. Você deve ler as especificações de programação cuidadosamente. Observe que a especificação de programação é um documento separado da folha de dados. Vá para a página do produto do seu PIC específico no site da Microchip e você encontrará um link para as especificações de programação na seção de documentos.

Adicionado sobre programação de alta tensão

Esses tipos de PICs têm duas maneiras de entrar no modo de programação: alta tensão (HVP) e baixa tensão (LVP). O método de alta tensão requer aumentar o MCLR para 8 e 9 volts e mantê-lo lá durante a programação. Este método sempre funciona, independentemente de quaisquer dados possíveis programados no PIC.

O método de baixa voltagem para entrar no modo de programação começa acionando o MCLR alto, depois baixo, e cronometrando em uma sequência de teclas especial de 32 bits usando PGC e PGD normalmente. A parte entrará no modo de programação na seqüência correta de teclas e permanecerá no modo de programação enquanto MCLR for mantido baixo.

O método de baixa tensão pode ser desativado por um dos bits de configuração. No entanto, o estado apagado do bit de configuração permite a programação de baixa tensão, é enviado da fábrica dessa maneira e esse bit de configuração só pode ser configurado para desabilitar o LVP se a programação tiver sido inserida com o método de alta tensão. Portanto, para o LVP não ser ativado, é necessário que tudo a seguir seja verdadeiro:

  1. O PIC foi programado pela última vez com um programador compatível com HVP e o modo de entrada do programa HVP foi usado.

  2. O arquivo HEX programado no PIC define deliberadamente o bit LVP na palavra de configuração 2 para o estado não apagado.

Como desabilitar o LVP requer uma ação deliberada e o programador certo, é provável que ele ainda esteja habilitado. Se ele foi deliberadamente desativado por algum motivo estranho, é necessário fornecer 8-9 V no MCLR para colocar o PIC no modo de programação pelo menos o tempo suficiente para executar uma exclusão em massa (que reativa o LVP).

Olin Lathrop
fonte
3

A programação de um PIC requer alta voltagem. Sim, é possível alternar um PIC para o modo "LVP" ou Programação de baixa tensão, mas você precisa de um programador de alta tensão para fazer isso.

Se o seu PIC já foi colocado no modo LVP, então sim, você pode programar facilmente o PIC no FPGA. Todas as folhas de dados contêm as formas de onda de programação necessárias para programar o chip; portanto, seria o caso de criar seu próprio dispositivo programador PIC no FPGA.

No entanto, se o PIC não tiver sido colocado no modo LVP, você precisará gerar uma alta tensão (normalmente 10V) e aplicá-la ao pino do MCLR no momento certo para entrar no modo de programação. Se você ainda não possui esse tipo de hardware em sua placa, seria necessário um hardware adicional que é controlado pelo FPGA no momento em que é acionado.

A maioria dos programadores PIC inclui um pequeno regulador de impulso (dobrador de tensão) para levar os 5V até 10V fornecidos, usando um PIC integrado para gerenciar a regulação de tensão. Eles costumam usar o PWM do PIC e uma entrada ADC no PIC como um simples regulador de impulso.

Você deve dar uma olhada nos esquemas PICkit2 disponíveis ao público.

Majenko
fonte
11
Não, é bem provável que não seja necessária alta tensão. A maioria das peças mais recentes, incluindo todas as séries 12F1xxx / 16F1xxx, pode usar uma sequência de teclas para entrar no modo de programação. Essa sequência não requer alta voltagem. Isso pode ser desativado na configuração, mas a peça é fornecida de fábrica com o método principal ativado. A menos que alguém desative deliberadamente a entrada no modo de programa de sequência de teclas, ele ainda deverá estar disponível. Se estiver desativado, sim, você precisará aumentar o MCLR para 8-9 V para entrar no modo de programação.
precisa
O modo de programação de teclas é o modo LVP. Depende de LVP = 1 na configuração. Parece que o chip padrão é LVP = 1, mas É = 1 nesse chip específico ou já foi programado com LVP = 0? Quem sabe? Como eu disse - se estiver no modo LVP, você não precisará da HV, caso contrário, precisará.
Majenko
Então, para programar no modo LVP, preciso implementar algum programador PIC "digital" (VHDL) no meu FPGA? Eu realmente não consigo pensar em uma maneira de fazer isso. Você poderia me ajudar a construí-lo?
Myst
Não posso. Você tem os esquemas para o pickit2 disponíveis, para saber quais sinais são necessários. Você tem a fonte do firmware pickit2 disponível, para saber como se comunicar. Você tem as folhas de dados de programação disponíveis, para saber quais instruções enviar e como enviá-las. A decisão de como você comunica o firmware para o PIC do seu computador é inteiramente sua. Quanta inteligência você deseja no seu FPGA e quanto no PC?
Majenko
Ok, obrigada. Em primeiro lugar, tentarei programar o PIC diretamente com o PICKIT 3. Em relação ao PICKIT (que minha empresa comprou para esse fim), tenho medo de conectá-lo diretamente aos pinos do PIC, pois estes são também conectado ao FPGA. Estou preocupado que alguma voltagem possa passar pelo FPGA desligado e causar algum dano. Essa é uma preocupação justificada?
Myst