fabiorike
As informações detalhadas das sintaxes dos comandos e respostas do cartão SD você encontra no datasheet do cartão.
Eu usei o datasheet do cartão da SanDisk
(
http://www.sandisk.com/Oem/Manuals/), já que não consegui encontrar o datasheet do cartão da Kingston, com o qual eu trabalhei durante a maior parte do desenvolvimento.
Creio que seja possível também baixar a especificação do padrão SD e MMC dos respectivos sites das organizações (SD:
http://www.sdcard.org / MMC :
http://www.mmca.org/home )
Só para lembrar (mais uma vez), o cartão SD é compatível com o cartão MMC e ambos trabalham em dois modos: no modo SPI (que é o que a maioria do pessoal que faz interface com microcontrolador usa, para aproveitar o periférico presente em grande parte dos microcontroladores) ou no modo SD/MMC...
Eu assumo que você vai usar o modo SPI (é o mais fácil) e sabe trabalhar com a SPI do seu micro...
Os comandos que você envia geralmente têm o mesmo número do seu mnemônico acrescidos de um ou com 0x40 (por exemplo, CMD0 = 0x00|0x40 = 0x40... CMD1 = 0x01|0x40 = 0x41), alguns comandos têm argumentos e todos têm que terminar com o envio do CRC (em alguns comandos é obrigatório enviar o CRC correto - no caso do CMD0, é 0x95 - mas o CRC pode ser desabilitado depois do CMD0 ou CMD1, não lembro agora de cabeça - mas está detalhado no datasheet, e daí basta enviar 0xFF ao invés de ter que calcular o CRC correto).
Para cada comando o cartão irá enviar uma resposta... no caso de ser um comando de leitura, após a resposta, ele enviará um pacote de dados, que inicia sempre com um data token (0xFE) seguido pelos dados propriamente ditos e depois pelo CRC.
Se você quer fazer em Assembly não há problema nenhum, inclusive existem códigos de exemplo em Assembly disponíveis na net também. Dependendo da sua familiaridade com o Assembly do seu processador, vai dar o mesmo trabalho que fazer em C (mas eu aconselharia a tentar fazer em C, por questão de elegância e portabilidade).