error SD_CalculaDireccion(byte * dir, dato buf[][tam_dato]){ long Auxiliar; byte i; Auxiliar = dir[0]; Auxiliar <<= 8; Auxiliar |= dir[1]; Auxiliar <<= 8; Auxiliar |= dir[2]; Auxiliar <<= 8; Auxiliar |= dir[3]; Auxiliar += 1; dir[0]=(byte)(Auxiliar>>24); dir[1]=(byte)(Auxiliar>>16); dir[2]=(byte)(Auxiliar>>8); dir[3]=(byte)(Auxiliar); SD_Assert(); for(i=0;i<4;i++) buf[0][i] = dir_lectura[i]; for(;i<8;i++) buf[0][i] = dir_escritura[i-4]; for(;i<12;i++) buf[0][i] = dir_base_lat[i-8]; for(;i<16;i++) buf[0][i] = dir_base_lon[i-12]; buf[0][i] = id; (void) SD_WriteSector((UINT32) u16FAT_Data_BASE, (UINT8 *) buf); //2600 sector del archivo binario, hacer vble global return _ERR_OK; }
esint8 if_writeBuf(hwInterface* file,euint32 address,euint8* buf) { if ( SD_WriteSector(address, buf, 1) == SD_TRUE) return 0; else return (-1); }
error SD_Escribir(byte *direccion, dato buf[][tam_dato]){ UINT32 u32SD_Block; // Convertimos la direccion en una variable de 32 bits byte tem; SPI_Init(); u32SD_Block = direccion[0]; u32SD_Block <<= 8; u32SD_Block |= direccion[1]; u32SD_Block <<= 8; u32SD_Block |= direccion[2]; u32SD_Block <<= 8; u32SD_Block |= direccion[3]; tem = SD_WriteSector(u32SD_Block, (UINT8 *) buf); (void)Cpu_Delay100US(100); ban_SDvacia=0; return _ERR_OK; }
error SD_LeerDireccion(){ UINT32 u32SD_Arch; int h=0, i=0; (void)SD_Assert(); //u32SD_Block=DIRECCION_BIN; //Cargar la direccion del sector fisico donde se encuentran las direcciones de lectura y escritura //(UINT32) u16FAT_Data_BASE (void)SD_ReadSector((UINT32) u16FAT_Data_BASE, (UINT8 *) Buffer_Envio); //Lee el sector que contiene las direcciones de lectura y escritura for(i=0;i<4;i++) dir_lectura[i] = Buffer_Envio[0][i]; //Se guardan las direcciones en las variables for( ;i<8;i++) dir_escritura[i-4] = Buffer_Envio[0][i]; for( ;i<12;i++) dir_base_lat[i-8] = Buffer_Envio[0][i]; for( ;i<16;i++) dir_base_lon[i-12] = Buffer_Envio[0][i]; id = Buffer_Envio[0][i]; if(dir_lectura[0]==0&&dir_lectura[1]==0&&dir_lectura[2]==0&&dir_lectura[3]==0&& dir_escritura[0]==0&&dir_escritura[1]==0&&dir_escritura[2]==0&&dir_escritura[3]==0){ u32SD_Arch=(UINT32) u16FAT_Data_BASE + 1; //Establece el segundo sector del archivo como el inicio de lectura y escritura dir_lectura[0]=(byte)(u32SD_Arch>>24); dir_lectura[1]=(byte)(u32SD_Arch>>16); dir_lectura[2]=(byte)(u32SD_Arch>>8); dir_lectura[3]=(byte)(u32SD_Arch); dir_escritura[0]=(byte)(u32SD_Arch>>24); dir_escritura[1]=(byte)(u32SD_Arch>>16); dir_escritura[2]=(byte)(u32SD_Arch>>8); dir_escritura[3]=(byte)(u32SD_Arch); SD_Assert(); for(i=0;i<4;i++) Buffer_Envio[0][i] = dir_lectura[i]; for(;i<8;i++) Buffer_Envio[0][i] = dir_escritura[i-4]; (void) SD_WriteSector((UINT32) u16FAT_Data_BASE, (UINT8 *) Buffer_Envio); //2600 sector del archivo binario, hacer vble global }