Página 1 de 1

SPI por firmware

MensagemEnviado: 14 Out 2013 16:25
por hemasc
Pessoal, estou tentando comunicar com uma RAM externa através de SPI, mas as portas que utilizarei não são próprias para SPI, ou seja, farei a SPI no braço...
Estou ciente que devo iniciar a RAM e abaixo os comandos:

READ - 0x03 Read data from memory array beginning at selected address
WRITE - 0x02 Write data to memory array beginning at selected address
RSTIO - 0xFF Reset Dual and Quad I/O access
RDMR - 0x05 Read Mode Register
WRMR - 0x01 Write Mode Register


cpp code
////////////////////////////////////////////

#define SPI3_SELECT PIN_B0
#define SPI3_DI PIN_B1
#define SPI3_DO PIN_B2
#define SPI3_CLK PIN_B3

//abaixo um exemplo de como eu enviarei um dado para a RAM externa
void escreve_spi_3(int8 dado)
{
int8 indice_dac;
SPI3_DO = 0;
indice_dac = 8;
while (indice_dac--)
{
if (bit_test(dado,indice_dac))
{
SPI3_DO = 1;
}
else
{
SPI3_DO = 0;
}
delay_us(5);
SPI3_CLK = 1;
delay_us(5);

SPI3_CLK = 0;
SPI3_DO = 0;
delay_us(5);
}
}

/////////////////////////////////////////////////////////////////////////


Minha dúvida é, como irei receber os dados da SPI?

output_low(SPI3_SELECT);
escreve_spi_3(0x03); //comando para leitura
escreve_spi_3(addressM); //MSB
escreve_spi_3(addressL); //MSB

neste ponto, se eu colocar um if na SPI3_DI e medir o tempo de 5us por bit de high e low eu conseguirei receber os dados?

output_high(SPI3_SELECT);

Re: SPI por firmware

MensagemEnviado: 14 Out 2013 17:07
por xultz
Como o PIC é mestre, é ele quem produz o clock (no causo, teu programa). Assim, se o na leitura o clock tiver 1ms, 10ms ou mais, não importa muito (a menos que o chip da RAM especifique um clock mínimo, o que acho que não existe). Assim, você clockeia, lê a porta e pega o bit, clockei, pega o próximo, e assim por diante.

Re: SPI por firmware

MensagemEnviado: 14 Out 2013 17:16
por hemasc
obrigado xultz... eu acabei não me atentando que posso fazer isso com o clock...
vou testar