Um dos meus projetos se beneficiaria muito com a capacidade de executar um programa que não é armazenado no microcontrolador (mas armazenado em um cartão SD).
Então, estou procurando um dispositivo que me permita carregar o código do cartão SD na RAM e depois executá-lo. Atualmente, só tenho o programador que acompanha o PicKit2, portanto, prefiro ficar com os PICs.
Alguém sabe quais, se houver, PICs podem fazer isso? Se nenhum PIC é capaz disso, então quais são os microcontroladores diferentes que funcionariam para isso? De preferência os que estão disponíveis em um pacote compatível com a placa de ensaio.
microcontroller
pic
Ponkadoodle
fonte
fonte
Respostas:
Existem alguns PICs que permitem adicionar memória de programa externa. Eu nunca fiz isso, mas as Notas de Aplicação AN869 e AN778 têm mais informações sobre como implementar a memória externa.
fonte
Outra opção a considerar é o uso de uma linguagem interpretada para seus programas armazenados no cartão SD. Dessa forma, o processador não está executando o código de máquina lido no cartão, apenas o trata como dados.
Essa abordagem oferece flexibilidade ao custo da velocidade.
Há muitas opções para escolher: Pesquisa de intérpretes / compiladores de idiomas de alto nível para microcontroladores
fonte
Como já foi dito, os PICs (que não sejam o PIC32) não podem fazer isso. Você provavelmente terá que ir para os processadores maiores em qualquer família ou para um processador com um barramento de memória externo, pois a maioria dos microcontroladores possui recursos de RAM muito limitados.
Os processadores MSP430 podem executar código a partir de seu espaço em RAM, mas você precisará de algo como o F5438 com 16k de espaço em RAM - executar código em 128 bytes não é realmente uma opção!
Se um processador tiver um barramento externo, você poderá colocar a RAM no espaço de código. Pode ser necessário adicionar alguma lógica extra para mapear a RAM em duas regiões de memória se a arquitetura do processador não permitir que dados sejam gravados na memória de execução.
Eu executei o código da RAM em um sistema baseado em 8051, mas isso significava que a RAM tinha que ser mapeada no espaço de memória EXTERN para programação e, em seguida, novamente no espaço CODE para execução. O programa carregador / monitor lidou com a troca e o carregamento do banco de memória. Por favor, não peça o código - fiz isso há cerca de 30 anos e está perdido há muito tempo (e escrito em PL / M-51)
fonte
Nenhum PIC de faixa baixa e média pode executar a partir da RAM devido à sua arquitetura de memória.
Qualquer CPU baseada em ARM deve executar a partir da RAM. Embora eles tendem a estar em pacotes smd, existem alguns módulos de tamanho 'DIP' que já possuem o microcontrolador carregado. Dê uma olhada no mbed ou no LPCXpresso, por exemplo. Ambos vêm com um gerenciador de inicialização ou, no caso do LPCXpresso, uma interface de depuração junto com compiladores gratuitos.
Se você preferir ficar com micros simples de 8 bits, talvez considere algo da família de freescale HCS08. Eles podem ser executados a partir da RAM e existe uma versão com código limitado do codewarrior IDE e C compilador disponível gratuitamente.
Tenho certeza de que o MPS430 também deve ser capaz de fazer isso, mas nunca fiz isso sozinho.
fonte
O Propeller carrega seu programa a partir de armazenamento externo.
fonte
Lembro-me de ler sobre um gerenciador de inicialização para AVRs que reimprimiria o chip com um arquivo .hex (presumivelmente) de um cartão SD. Não consigo encontrar a fonte original, mas essa pesquisa no Google mostra alguns hits interessantes. Sim, eu sei que isso é AVR e não PIC, mas você pode achar útil se a coisa PIC não funcionar.
fonte
Como outros pôsteres observaram, você não pode executar a partir da RAM em um PIC de 8 ou 16 bits, porque eles usam uma arquitetura Harvard (código separado e espaços de dados). Se é prático ou não carregar um programa em um cartão SD e atualizá-lo para codificar a memória, depende de quantas vezes você fará isso.
Se você está tentando criar um ambiente dinâmico como um sistema operacional que sobrepõe programas constantemente, então não. Mas, no meu caso, eu tenho um programa que carrega drivers conforme necessário em um cartão SD de 2 GB. O PIC24FJ256GB110 possui um mínimo de 10.000 ciclos de apagamento / gravação. Mesmo que isso fosse feito cinco vezes por dia, o flash duraria no mínimo 5 anos e meio.
(Nota: o valor de 10.000 é o mínimo. A resistência típica dos ciclos de apagamento / gravação pode ser cinco vezes maior - portanto, se você estiver desenvolvendo, provavelmente poderá repassar um processador 140 vezes por dia - a cada 3 1/2 minutos por oito horas - e ainda pode durar um ano.)
fonte
Na minha escola, usamos processadores HC11 ou HC12 com RAM externa para carregar e executar programas em ... mas esqueci o nome das placas / kit :( De qualquer forma, os MCUs da Freescale HC (S) endereçam a RAM e a ROM de forma idêntica , para que você possa carregar o código na RAM e executá-lo.
Em uma fila
blalor
, a melhor solução pode ser apenas adicionar um botão em sua placa que reflash o PIC dos dados armazenados em um cartão SD que você insere com um carregador de inicialização. Não consigo imaginar que tipo de código não caberia nos PICs maiores; se você tiver alguns dados estáticos (gráficos, texto, som), mantenha-os no armazenamento externo.fonte
Você provavelmente não pode alocar a partir da RAM, mas para o seu aplicativo você pode ter um pequeno carregador em flash que pode ler os dados do cartão SD no restante do flash. Eu usei essa abordagem com um chip flash controlado por SPI para permitir que o firmware fosse carregado a partir de um link sem fio e depois instalado depois de recebido completamente; Não consigo pensar em nenhum motivo específico para não funcionar com um cartão SD, embora um carregador de inicialização compatível com SD possa ocupar algum espaço.
fonte
Alguns microcontroladores permitem fazer isso, parece que não é a foto. o que você gostaria de fazer é ter um gerenciador de inicialização que use spi para ler do cartão sd, copie o programa, que provavelmente quer ser um nome de arquivo conhecido ou codificado, provavelmente no diretório raiz, analise esse arquivo no ram e depois ramifique para o programa em ram. Os controladores baseados em ARM certamente permitirão que você faça algo assim.
Uma alternativa seria fazer com que o gerenciador de inicialização leia o cartão sd pelo spi e, em vez de copiar para ram e gravar ramificações em uma parte do flash. Provavelmente deseja ter um botão se o botão for pressionado ao ligar ou redefinir e carregar um novo programa a partir do cartão SD, caso contrário, se a assinatura ou a soma de verificação parecerem boas nessa parte carregável do flash e depois no ramo de inicialização para essa parte do flash. Ou talvez, se o cartão SD estiver presente, carregue-o, caso contrário, ramifique para a parte carregável do flash. Pode usar esse método com base em braço e com base em avr, possivelmente até com base em foto, mas minha experiência com foto é datada. msp430 eu assumiria também. Basicamente, se você pode reprogramar partes do flash a partir do qual é executado, a partir do próprio processador do microcontrolador,
fonte