Цитата Сообщение от Hammer Посмотреть сообщение
купил фен, и научился им работать
Это самое главное

Хотя, эта мега паяльником тоже паяется )

Цитата Сообщение от Hammer Посмотреть сообщение
Мигает светодиодом постоянно
Мигание означает, что либо нету связи с картой, либо что то не нравится.

sd_check()

Код:
/**************************************************************************
*  Проверка готовности/наличия карты                                      *
**************************************************************************/

BYTE sd_check() {
  BYTE i = 0;
  do { 
    sd_sendCommand(APP_CMD, 0);
    if(sd_sendCommand(SD_SEND_OP_COND, 0x40000000) == 0) return 0;
  } while(--i);
  return 1;
}
[свернуть]


fs_check()

Код:
/**************************************************************************
*  Проверка наличия диска и если нужно, то его инициализация              *
**************************************************************************/

BYTE fs_check() {
  if(!sd_check()) return 0;
  return fs_init();
}
[свернуть]


fs_init()

Код:
/**************************************************************************
*  Инициализация                                                          *
**************************************************************************/

BYTE fs_init() {
  DWORD bsect, fsize, tsect;

  /* Сбрасываем оптимизацию */
  fs_fatoptim = 2;

  /* Предотвращаем ошибки программиста */
#ifndef FS_DISABLE_CHECK
  fs_file.opened = OPENED_NONE;
#ifndef FS_DISABLE_SWAP  
  fs_secondFile.opened = OPENED_NONE;
#endif 
  fs_type = FS_ERROR;
#endif

  /* Инициализация накопителя */
  if(sd_init()) return 1;
  
  /* Ищем файловую систему */
  bsect = 0;               
  while(1) {                 
    if(sd_readBuf(bsect)) return 1;
    if(LD_WORD(buf + 510) == 0xAA55) {
      if(LD_WORD(buf + BS_FilSysType  ) == 0x4146) break;
      if(LD_WORD(buf + BS_FilSysType32) == 0x4146) break;
      /* Возможно это MBR */       
      if(bsect == 0 && buf[MBR_Table+4]) { 
        bsect = LD_DWORD(buf + (MBR_Table + 8));
        if(bsect != 0) continue;
      }      
    }   
abort_noFS:
    lastError = ERR_NO_FILESYSTEM; return 1;
  }
        
  /* Размер таблицы FAT в секторах */
  fsize = LD_WORD(buf + BPB_FATSz16);
  if(fsize == 0) fsize = LD_DWORD(buf + BPB_FATSz32);
  
  /* Размер файловой системы в секторах */
  tsect = LD_WORD( buf + BPB_TotSec16);  
  if(tsect == 0) tsect = LD_DWORD(buf + BPB_TotSec32);
  
  /* Размер корневого каталога (должно быть кратно 16 и для FAT32 должно быть рано нулю) */
  fs_n_rootdir = LD_WORD(buf + BPB_RootEntCnt);
  
  /* Адреса таблиц FAT в секторах */
  fs_fatbase  = bsect + LD_WORD(buf + BPB_RsvdSecCnt);
  fs_fatbase2 = 0;
  if(buf[BPB_NumFATs] >= 2) fs_fatbase2 = fs_fatbase + fsize;

  /* Кол-во секторов на кластер */
  fs_csize = buf[BPB_SecPerClus];

  /* Кол-во кластеров */
  fsize *= buf[BPB_NumFATs];
  fs_n_fatent = (tsect - LD_WORD(buf + BPB_RsvdSecCnt) - fsize - fs_n_rootdir / 16) / fs_csize + 2;

  /* Адрес 2-ого кластера */
  fs_database = fs_fatbase + fsize + fs_n_rootdir / 16;
  
  /* Определение файловой системы */
  
  /* FAT 12 */
  if(fs_n_fatent < 0xFF7) goto abort_noFS; 
  
  /* FAT 16 */
  if(fs_n_fatent < 0xFFF7) {
    fs_dirbase = fs_fatbase + fsize; 
    fs_type = FS_FAT16;
    return 0;
  }    
   
  /* FAT 32 */
  fs_dirbase = LD_DWORD(buf + BPB_RootClus);
  
  /* Сбрасываем счетчик свободного места */
  if(LD_WORD(buf + BPB_RsvdSecCnt)>0) {
    bsect++;
    if(sd_readBuf(bsect)) return 1;
    if(LD_DWORD(buf) == 0x41615252 && LD_DWORD(buf + 0x1E4) == 0x61417272 && LD_DWORD(buf + 0x1FC) == 0xAA550000) {
      LD_DWORD(buf + 0x1E8) = 0xFFFFFFFF;
      LD_DWORD(buf + 0x1EC) = 0xFFFFFFFF;
      if(sd_writeBuf(bsect)) return 1;
    }
  }
  fs_type = FS_FAT32;
      
  return 0;
}
[свернуть]


- - - Добавлено - - -

Цитата Сообщение от Hammer Посмотреть сообщение
Заменил 328p на Атмегу 8
Не забывайте, что прошивка у них разная.