LusoRobótica - Robótica em Português
Sistemas específicos => ARM => Tópico iniciado por: nunosilvarocha em 05 de Agosto de 2013, 16:50
-
Boa tarde pessoal,
Estou na iniciação em ARM e neste momento necessito de guardar dados num cartão SD mas não me estou a entender com isto, será que alguém me pode dar umas dicas?
-
Olá,
Tens aqui um capitulo sobre isso: http://www.cs.indiana.edu/~geobrown/book.pdf (http://www.cs.indiana.edu/~geobrown/book.pdf) posso-te dizer que foi aquele que achei mais complicado e os resultados não correram lá muito bem. Talvez na internter encontres bibliotecas já prontas a usar.
-
Olá,
Tens aqui um capitulo sobre isso: http://www.cs.indiana.edu/~geobrown/book.pdf (http://www.cs.indiana.edu/~geobrown/book.pdf) posso-te dizer que foi aquele que achei mais complicado e os resultados não correram lá muito bem. Talvez na internter encontres bibliotecas já prontas a usar.
Estava à espera da alguma biblioteca de preferência com exemplo para tentar por isto a trabalhar.
-
FatFS do ElmChan, nem acredito que não a tenhas encontrado numa pesquisa de 2 segundos.
https://sites.google.com/site/stm32discovery/stm32-resources-and-links/sd-cards-and-fat-filesystems-for-stm32-cortex-m3 (https://sites.google.com/site/stm32discovery/stm32-resources-and-links/sd-cards-and-fat-filesystems-for-stm32-cortex-m3)
http://www.stf12.org/developers/FatFS.html (http://www.stf12.org/developers/FatFS.html)
-
FatFS do ElmChan, nem acredito que não a tenhas encontrado numa pesquisa de 2 segundos.
https://sites.google.com/site/stm32discovery/stm32-resources-and-links/sd-cards-and-fat-filesystems-for-stm32-cortex-m3 (https://sites.google.com/site/stm32discovery/stm32-resources-and-links/sd-cards-and-fat-filesystems-for-stm32-cortex-m3)
http://www.stf12.org/developers/FatFS.html (http://www.stf12.org/developers/FatFS.html)
Por acaso já tinha estado nesse link mas mesmo assim não me consigo desenrascar precisava de mais alguma ajuda.
-
E que ajuda é que queres, convinha especificares um bocdo mais o teu problema..
-
E que ajuda é que queres, convinha especificares um bocdo mais o teu problema..
Ainda não consegui perceber que ficheiros tenho que usar e depois como os usar. Neste momento estou no nivel zero.
-
A biblioteca tem exemplos, acho que podias começar por ver os exemplos.
-
A biblioteca tem exemplos, acho que podias começar por ver os exemplos.
Ja adicionei mas parece que ainda não tenho tudo, pois faltam algumas funções.
-
Isso tem vários niveis, só leitura, leitura e escrita, e mais umas coisas que são configuraveis.
-
Isso tem vários niveis, só leitura, leitura e escrita, e mais umas coisas que são configuraveis.
Eu só preciso de escrever para um ficheiro.
Das pesquisas que tenho feito é tudo com Chibios e eu não estou a usar nada disso.
E a biblioteca que saquei parece não ter os ficheiros todos. Cada vez percebo menos disto
-
Podias dar mais informação, não gosto de jogar ás 40 perguntas....
Site oficial:
http://elm-chan.org/fsw/ff/00index_e.html (http://elm-chan.org/fsw/ff/00index_e.html)
Implementado em STM32:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html#chanfat_stm32 (http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html#chanfat_stm32)
-
Lê o Livro que te disse, o capítulo sobre sdcard, sempre te da uma explicação de como funciona.
-
Podias dar mais informação, não gosto de jogar ás 40 perguntas....
Site oficial:
http://elm-chan.org/fsw/ff/00index_e.html (http://elm-chan.org/fsw/ff/00index_e.html)
Implementado em STM32:
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html#chanfat_stm32 (http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html#chanfat_stm32)
Depois de tanta confusão em iniciar-me com o fatfs encontrei esta placa http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996 (http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996) que usa tambem um stm32F3 e o Demo do projeto mostra como trabalhar com o SD com fatfs.
Tentei implementar na minha programação mas até agora não consegui inicializar o cartão. O cartão é de 8Gb e penso que isso possa ser um problema mas de momento não tenho mais nenhum disponível.
Alguém faz ideia do que poderá ser para alem disso?
-
Já está tudo a trabalhar direito, já consigo guardar dados no cartão.
O projeto Demo da placa http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996 (http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996) é um bom exemplo para conseguir por o SD a tarbalhar
Agora falta configurar o I2C para ler dados do sensor https://www.sparkfun.com/products/10239 (https://www.sparkfun.com/products/10239)
-
Já está tudo a trabalhar direito, já consigo guardar dados no cartão.
O projeto Demo da placa http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996 (http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996) é um bom exemplo para conseguir por o SD a tarbalhar
Agora falta configurar o I2C para ler dados do sensor https://www.sparkfun.com/products/10239 (https://www.sparkfun.com/products/10239)
Qual era o problema?
-
Já está tudo a trabalhar direito, já consigo guardar dados no cartão.
O projeto Demo da placa http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996 (http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252996) é um bom exemplo para conseguir por o SD a tarbalhar
Agora falta configurar o I2C para ler dados do sensor https://www.sparkfun.com/products/10239 (https://www.sparkfun.com/products/10239)
Qual era o problema?
Estou a usar a biblioteca "stm32303c_eval_i2c_ee.c" e não estou a conseguir ler nenhum valor.
-
Qual a lógica a seguir para conseguir ler dados deste sensor?
Ainda não consegui ler valor nenhum.
-
Ler a datasheet para saberes que endereço usar, ver que registos configurar, tens os pull-ups no bus i2c?
-
Ler a datasheet para saberes que endereço usar, ver que registos configurar, tens os pull-ups no bus i2c?
No datasheet diz que tenho que ler o endereço 10 para a sensibilidade e o 12 para offset.
E tenho os pull-ups no bus do i2c.
Esta é a minha configuração para o I2C
/* Configure the I2C clock source. The clock is derived from the SYSCLK */
RCC_I2CCLKConfig(RCC_I2C2CLK_SYSCLK);
/* sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOF, ENABLE);
/* sEE_I2C Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
/* Connect PXx to I2C_SCL*/
GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_4);
/* Connect PXx to I2C_SDA*/
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_4);
/* GPIO configuration */
/* Configure sEE_I2C pins: SCL */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_Init(GPIOF, &GPIO_InitStructure);
/* Configure sEE_I2C pins: SDA */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//-----------------------------------------------------------------------------------
/*!< I2C configuration */
/* sEE_I2C configuration */
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
I2C_InitStructure.I2C_DigitalFilter = 0x00;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_Timing = sEE_I2C_TIMING;
/* Apply sEE_I2C configuration after enabling it */
I2C_Init(I2C2, &I2C_InitStructure);
/* sEE_I2C Peripheral Enable */
I2C_Cmd(I2C2, ENABLE);
//-------------------------------------------------------------------------------------
-
Tipicamente em i2c queres um limite na velocidade a que o sinal transita de nivel lógico(o chamado slew rate), pinos com largura de banda de 50Mhz devem oscilar um bocadinho, mas não deve ser esse o problema.
Tens o endereço i2c correcto, por vezes tens de fazer um shift á direita ou á esquerda em relação ao valor da datasheet para ficar em concordancia como o motor i2c do chip que estás a usar.
-
Tipicamente em i2c queres um limite na velocidade a que o sinal transita de nivel lógico(o chamado slew rate), pinos com largura de banda de 50Mhz devem oscilar um bocadinho, mas não deve ser esse o problema.
Tens o endereço i2c correcto, por vezes tens de fazer um shift á direita ou á esquerda em relação ao valor da datasheet para ficar em concordancia como o motor i2c do chip que estás a usar.
Ja tentei alterar o endereço do I2C e nada.
Para ler o I2C estou a usar o seguinte codigo:
printf("\n\rTerminou inicialização");
I2C_GenerateSTART(I2C2, ENABLE);
sEE_WaitEepromStandbyState();
printf("\n\rPonto 1");
I2C_TransferHandling(I2C2, 0xA0 , 255, I2C_Reload_Mode, I2C_Generate_Start_Read);
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_RXNE) == RESET); //<----- bloqueia nesta função
printf("\n\r FLAG [Receive data register not empty] set");
uint16_t rxi2c=I2C_ReceiveData(I2C2);
printf("\n\rRerebido -> %d", rxi2c);
Ainda estou muito verde em ARM, mas tenho que terminar este sensor.