Alguém conhece uma forma de converter uma breakout SDCard com comunicação SPI para comunicação I2C?

Ou qualquer outro protocolo que ocupe outras portas do Arduino que não as da SPI.

Exibições: 1079

Responder esta

Respostas a este tópico

Olá,

Qual seria o motivo para não usar os pinos SPI?

Abraço.

Olá,

O projeto é o seguinte: tenho um garagino, ligado a uma breakout Enc28j60, rodando um programa cliente Web utilizando a biblioteca Ethercard. 

Precisei ligar um SDCard, pois queria passar configurações de IP, Server, etc para o programa sem ficar recompilando o mesmo a cada alteração.

Estou utilizando um conversor de nível lógico, pois o Garagino está funcionando em 5V e o SDCard em 3.3V.

Estou utilizando, também, a biblioteca TinyFAT, que consome menos memória RAM, pois só preciso ler o cartão, e quando usava outra, como a SD, o programa travava por falta de memória.

Tudo estava funcionando bem, mas fiz alguma alteração no programa, que fez a inicialização do cartão travar.

Já tive muita dor de cabeça com dois ou mais dispositivos ligados via SPI, pois as bibliotecas não são bem escritas para permitir o chaveamento destes.

Passar o SDCard para I2C resolveria o meu problema. A não ser que a biblioteca Wire consuma mais memória RAM que a TinyFAT.

Vide foto do esquema, abaixo:

Esqueci de dizer que a falta de memória é tanta que o programa verifica se o cartão está presente, lê o arquivo de configuração, armazena na EEPROM, e pede para retirar o cartão e resetar o Garagino. Na nova inicialização sem o cartão o programa lê a EEPROM com a nova configuração, assim o conteúdo do arquivo lido não está mais na RAM e assim há espaço para as variáveis do Enc28j60.

Obs.: estou trabalhando com o buffer do ethercard no tamanho exato que preciso para montar o meu request e coloquei todas as variáveis somente de leitura e mensagens na área de programa (memória Flash).

Oi WB, boa tarde.

nunca usei a biblioteca SPI, por isto posso estar falando errado,

mas os I/Os SPI tem uma linha de HW que é o CS (Chip Select), que acredito voce possa usar com pinos do

Arduino para selecionar o I/O que quer ativar, e usar naquela parte do código.

Rui

Rui, Boa tarde.

Sim tem o CS para chavear entre os dispositivos. Acontece que são as bibliotecas que fazem uso desta seleção através de suas funções. Por exemplo, no programa vai ter uma chamada de função para ler o cartão de memória e depois uma outra função para configurar o ip do ethernet card e depois outra função para estabelecer a conexão. É dentro destas funções que o pino CS é habilitado e ao término da função é desabilitado. Será que o programador colocou este habilita/desabilita em todas as funções? E se tiver uma função que habita o CS e que só é desabilitado quando chamo uma outra? Enfim, pode ser desconfiança minha ou falta de conhecimento, mas acho SPI arriscado para usar com estas bibliotecas. Acho que neste projeto é falta de memória RAM e não conflito da SPI, pois estes dispositivos consomem muita memória e só temos 2Kb de RAM no Arduino UNO. Por isso, estou procurando um protocolo mais leve. Se eu utilizasse o Ethernet Shield W5100, que já vem com o SDCard integrado, não teria problemas, mas já comprei o Garagino+Enc28j60+SDCard, que são bem mais em conta. Só que o Enc28j60 é mais limitado e depende de mais software no Arduino para trabalhar com TCP.

Use uma RAM que funciona com SPI . 

23LC1024

  • 128K x 8-bit Organization:- 32-byte page
  • SPI-Compatible Bus Interface:- 20 MHz Clock rate- SPI/SDI/SQI mode

http://www.microchip.com/wwwproducts/en/23LC1024

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço