SD CARD

Componentes, Dispositivos, Equipamentos, etc...

Moderadores: 51, guest2003, Renie

SD CARD

Mensagempor vtrx » 20 Jan 2014 22:35

Não tenho experiencia com SD card,estou tentendo entender umas rotinas que utilizam SPi e um cartão MINI de 4 Gigas.
A rotina que achei,usa UART e testei uma rotina que le a capacidade do cartão,o resultado é uma variavel de 32 bits(sd_size).
Na rotina original,que é Chinesa e não sei se esta correta,o resultado é mostrado da seguinte forma:
Código: Selecionar todos
   printf("\n\rSD Card Size: %ld  b\n\r",sd_size);


Isso me retorna "SD Card Size: -268435456 b"
Não parece correto.
Procurando na net,achei um trecho de código que parece que usa a mesma rotina,mas esta formatada assim:
Código: Selecionar todos
LCD_ShowNum(164,150,sd_size>>20,4,16);//显示SD卡容量


Apenas aproveirei a idéia e usei assim:
Código: Selecionar todos
   printf("\n\rSD Card Size: %ld  b\n\r",sd_size>>20,4,16);


Deste modo retornou;
SD Card Size: 3840 b

Esta ultima formatação esta correta?
Seria o retorno de 3.840 Gigas?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: SD CARD

Mensagempor cfreund » 20 Jan 2014 23:12

A variável está definida como unsigned, então utilize "%lu". E então, deverá imprimir: "4026531840"

Sim, está correto quando informa 3,8 GB, pois você fez shift para mostrar 12 MSB.

Retire o ",4,16". Não está fazendo nada além de ocupar espaço.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: SD CARD

Mensagempor xultz » 21 Jan 2014 07:25

Retire o ",4,16". Não está fazendo nada além de ocupar espaço.

O compilador não deveria ter dado erro por passar mais parâmetros que o necessário?
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: SD CARD

Mensagempor vtrx » 21 Jan 2014 07:25

A variável está definida como unsigned, então utilize "%lu". E então, deverá imprimir: "4026531840"

Foi isso que acabei fazendo.
Como quase sempre programava a UART para enviar dados apenas,e em,ASM,não usava a fornatação,agora tiver que rever mas ja estou passando para usar LCD.
Obrigado.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: SD CARD

Mensagempor cfreund » 21 Jan 2014 07:55

xults,

Do jeito que está, não irá causar problemas na execução.

Apenas alguns poucos compiladores interpretam o texto de formatação e alertam sobre inconsistências. Só vi isso no Visual Studio.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: SD CARD

Mensagempor vtrx » 21 Jan 2014 21:35

Aproveitando,no KEil,estou precisando saber como transformar uma variavel u32 em String,seria para mostrar o valor acima no GLCD que ja tem a rotina que aceita char.
A frase é iniciado com;
Código: Selecionar todos
u8 Frase0[] = " SD CARD OK";

Iria mostar o valor de sd_size,que é Dword.


PS:Eu achei uma rotina para 16 bits e 'dobrei 'ela,deste modo funcionou,se alguem tivar algo mais interessante me de uma dica.

Código: Selecionar todos
void  DWordTOStr(u32 n,u8*str)   
 {
 u8 a[10];   
 u8 i,j;
 
 a[0]=(n/1000000000)%10;                       
 a[1]=(n/100000000)%10;                                         
 a[2]=(n/10000000)%10;                                         
 a[3]=(n/1000000)%10;                                           
 a[4]=(n/100000)%10;                                     
 a[5]=(n/10000)%10;                       
 a[6]=(n/1000)%10;                                         
 a[7]=(n/100)%10;                                         
 a[8]=(n/10)%10;                                           
 a[9]=(n/1)%10;     
 for(i=0;i<10;i++)   
  a[i]='0'+a[i];   
    for(i=0; a[i]=='0' && i<=3; i++ );                         
    for(j=0;j<i;j++)                           
        {*str=' '; str++;}                                 
    for(; i<10; i++)                                             
        {*str=a[i];str++;}             
       *str='\0';   
 }
Editado pela última vez por vtrx em 22 Jan 2014 07:34, em um total de 1 vez.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: SD CARD

Mensagempor cfreund » 22 Jan 2014 04:39

Minha implementação:

Código: Selecionar todos
static const char base_key[16] = "0123456789ABCDEF";

char *ultoa_s(unsigned long val, unsigned char base, unsigned char width){
   static char buffer[33];
   unsigned char cnt;
   
   cnt = 32
   buffer[cnt] = 0;
   if((base >= 2) && (base <= 16)){
      do {
         if(width) --width;
         buffer[--cnt] = base_key[val % base];
         val /= base;
      } while(val && cnt);
      while(width-- && cnt) buffer[--cnt] = '0';
   }
   
   return (buffer + cnt);
}


Ex: strcpy(Frame0, ultoa_s(0xFAFAFAFA, 16, 0));
Editado pela última vez por cfreund em 22 Jan 2014 05:24, em um total de 6 vezes.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: SD CARD

Mensagempor cfreund » 22 Jan 2014 04:47

vtrx escreveu:
Código: Selecionar todos
u8 Frase0[] = " SD CARD OK";



Tenha em mente que o tamanho de "Frase0" é de 11 caracteres. Cuidado com buffer overflow.
Cláudio F
Avatar do usuário
cfreund
Word
 
Mensagens: 672
Registrado em: 14 Out 2006 14:02
Localização: São Paulo

Re: SD CARD

Mensagempor vtrx » 30 Jan 2014 14:44

Preciso continuar o aprendizado com SD CARD,e tenho algumas dúvidas sobre o uso da escrita/leitura sem OS.
Se alguem quiser ajudar,vou postar as dúvidas,mas dispenso críticas que não sejam feitas por algum ADM.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: SD CARD

Mensagempor vtrx » 31 Jan 2014 11:51

Via Email consegui implementar NTFS no SD,assunto encerrado.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: SD CARD

Mensagempor Rodrigo_P_A » 31 Jan 2014 17:12

vtrx escreveu:Via Email consegui implementar NTFS no SD,assunto encerrado.

Tem como compartilhar?
---
Avatar do usuário
Rodrigo_P_A
Dword
 
Mensagens: 2237
Registrado em: 12 Out 2006 18:27
Localização: Osasco - S.P - Brasil


Voltar para Componentes\Equipamentos Eletrônicos

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x