Gast
#177442
Hallo, ich habe mir folgende funktion geschrieben um die LBA werte in die entsprechenden register der CF karte zu schreiben. Ich habe das ganze aufm PC in C getestet und ich bekomme die richtigen werte für die einzelnen register zurück. Wenn ich die funktion aufm AVR laufen lasse, bekomme ich für bit D23..16 "immer" 0xff obwohl es auf dem PC forher ging!! Wenn ich in der funktion statt "unsigned long lba" ein "unsigned long long lba" nehme funktioniert die funktion einwandfrei, woran kann das liegen?? void read_sector(unsigned long lba) { unsigned char temp = 0; CF_write_register(sec_cnt_reg, 0x01); //1 Sektor lesen temp = (unsigned char)lba; //D7..0 CF_write_register(sec_num_reg, temp); //lcd_print_int(temp); temp = (unsigned char)(lba>>8); //D15..8 CF_write_register(cyl_lo_reg, temp); //lcd_print_int(temp); temp = (unsigned char)(lba>>16); //D23..16 CF_write_register(cyl_hi_reg, temp); //lcd_print_int(temp); temp = (unsigned char)(lba>>24); //D27..24 temp &= 0x0f; //Nur unteren 4 bits temp |= 0xE0; //LBA mode CF_write_register(head_reg, temp); //lcd_print_int(temp); }