Vitat's homepage

General => MP3 => Topic started by: efko on 15 Dec 2007, 02:43



Title: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: efko on 15 Dec 2007, 02:43
привет. Собрал yampp+эмулятор в одном по проекту Сергея на atmega162.
После решения мелких обнаруженных проблем в печатке все вроде как заработало. Т.е на HU появился пункт MultiCD который успешно выбирается. Но дальше не все так хорошо. При подключенном винте сообщает об ошибке Error_01, что означает неправильный размер кластера. При включении без винта - ошибка Error_04 - что значит NO_HDD - здесь все ок.
Проблема в том что размер кластера на винте 100% совпадает с размером, заданным в constant.h
Самое интересное в том, что если залить оригинальную прошивку yampp_pioneer_v2.2.zip, то все успешно определяется и работает.
Копания в коде Сергея привели к след результату:
1.Ошибка ERROR_01 неправильный размер кластера формируется в след участке кода файла Yampp3.c
Code:
ATA_Init();                     // Init and wait for drive
 ATA_SW_Reset();                 // Reset drive   
   
 if (ATA_SetDownTime())
   {
if (init_fat()) // Read disk structure
  {    
SetPlayerError(1,1);  //Error 01 CLUSTER SIZE INVALID
  }
else
    {
wMaxDirs = dirlist();      
           
т.е init_fat() возвращает ВСЕГДА не нулевое значение.
В теле этой функции, которая описана в файле FAT.C я обратил внимание на след расхождение:
В проекте Сергея:
Code:
#ifdef CHS_ACCES_FIRST
//++++++++++++++++++++++++++++++++++++++++
// fix from Uli (Ulrich.Behrenbeck@Informatik-Werkstatt.de)
ATA_ReadCHS0(1, 1, 1, 1, FAT_CACHE); 

// LBA bit NOT set !!! a raw erroneous CHS access
//++++++++++++++++++++++++++++++++++++++++
#else
// read partition table
ATA_ReadLBA0(0, 1, FAT_CACHE);
#endif

// get the partition record
pr = (struct partrecord *) ((struct partsector*)FAT_CACHE)->psPart;

// and find the first valid sector
first_sec = pr->prStartLBA;

// Read the Partition BootSector
ATA_ReadLBA0(first_sec, 1, FAT_CACHE);
// get BIOS parameter block
#ifdef FAT16
bpb = (struct bpb50*)((struct bootsector50*)FAT_CACHE)->bsBPB;
#else
bpb = (struct bpb710*)((struct bootsector710*)FAT_CACHE)->bsBPB;
#endif
// and setup some constants
if (bpb->bpbSecPerClust != SECT_PER_CLUST) // Recompile code for this disk
// return false;
{
return bpb->bpbSecPerClust;
}

, в отличии от оригинальной прошивки эмулятора:
Code:
#ifdef CHS_ACCES_FIRST
//++++++++++++++++++++++++++++++++++++++++
// fix from Uli (Ulrich.Behrenbeck@Informatik-Werkstatt.de)
ATA_ReadCHS0(1, 1, 1, 1, TMP_SECTOR); 
// LBA bit NOT set !!! a raw erroneous CHS access
//++++++++++++++++++++++++++++++++++++++++
#else
ATA_ReadLBA0(0, 1, TMP_SECTOR);
#endif
// read partition table
ATA_ReadLBA0(0, 1, TMP_SECTOR);

// get the partition record
pr = (struct partrecord *) ((struct partsector*)TMP_SECTOR)->psPart;

// and find the first valid sector
first_sec = pr->prStartLBA;

// Read the Partition BootSector
ATA_ReadLBA0(first_sec, 1, TMP_SECTOR);

// get BIOS parameter block
#ifdef FAT16
bpb = (struct bpb50*)((struct bootsector50*)TMP_SECTOR)->bsBPB;
#else
bpb = (struct bpb710*)((struct bootsector710*)TMP_SECTOR)->bsBPB;
#endif
// and setup some constants
if (bpb->bpbSecPerClust != SECT_PER_CLUST) // Recompile code for this disk
// return false;
return bpb->bpbSecPerClust;
отсутствует пара строчек после #endif -    

// read partition table
   ATA_ReadLBA0(0,   1, TMP_SECTOR);

т.е насколько я понимаю ATA_readLBA0() по ошибке не вызывается в прошивке Сергея, если раскоментирован параметр #define CHS_ACCES_FIRST.
Так и должно быть? Почему в оригинальной прошивке вызов этой функции происходит в любом случае, независимо от значения CHS_ACCES_FIRST?
Может ли быть косяк в этом? Кстати у него он был закоментирован по умолчанию, у меня же в таком случае виснет на определении винта. Пришлось раскомментировать.
Вопрос конечно больше к Сергею, но он не отвечает на письма. Vitat, может быть Вы подскажете. Почему еще может появляться ошибка размера кластера, кроме как ошибки размера кластера собственно?:)

Заранее благодарен! Извиняюсь за некоторую "сумбурность" рассказа.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 15 Dec 2007, 12:36
У  Вас скорее всего читается мусор с диска. Во первых:  какой кварц меги, не меняли? Во вторых побрубуйте уменьшить/увеличить
колличесвто NOP в файле ata_if.c функция (u08 ExecuteCommand(u08 NumSectors, u08 *Buffer)).


for(i=BPS / MINIBUFFERSIZE;i;i--)
      {  // cycle sector by minibuffers
         cli(); //Need for block HU message
         SetAddress(CMD_A + CMD_DATA);         // setup addressing and chip selects         
         DDRA=0x00;            // port A as input
         PORTA=0xFF;            // activate Pullups
         DDRC=0x00;            // port C as input
         PORTC=0xFF;            // activate Pullups
         
         asm volatile ("movw r30,r28");
         asm volatile ("adiw r30,1");             
         for(j=MINIBUFFERSIZE;j;)
         {   // cycle minibuffer by words         
            cbi(PORTB, 1);                   // set DIOR lo            
            
            asm volatile ("nop");       // allow pin change !!! BE carefull! On other clocks change number of 'nop'
            asm volatile ("nop");       // allow pin change   
                                       
            
            //asm volatile ("nop");       // allow pin change                                          
            //asm volatile ("nop");       // allow pin change


то что выделено


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 15 Dec 2007, 13:18
Вдогонку
CHS_ACCES_FIRST закоментируйте.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 15 Dec 2007, 14:25
Сергей здравствуйте! Рад Вашему появлению на форуме!) Долго пытался связаться с вами)
Кварц меги 12 Мгц, без изменений. Фьюзы как в yampp3/usb, только без совместимости с mega161.Тут все нормально.

Мусор в каком плане? Некорректное чтение секторов? Пробовал несколько винтов, форматил разными прогами. Может быть попробовать с FAT16? Можно как то получить log обмена даннами с винтом в вашей прошивке? после раскоментирования DEBUG_ATA и ENABLE_SERIAL пропадает обмен с HU. Пока не понял почему, но HU просто перестает видеть MultiCD. В общем вопросов пока больше чем ответов) Некоторые может быть очень глупые.

Во вторых побрубуйте уменьшить/увеличить
колличесвто NOP в файле ata_if.c функция (u08 ExecuteCommand(u08 NumSectors, u08 *Buffer))

ок,попробую. Спасибо за совет.

Если закоментировать CHS_ACCES_FIRST - плейер виснет на определении винта (постоянно горит светодиод) после чего теряется связь с HU.
Не понимаю, откуда у меня столько проблем. У вас ведь вроде все работало. Кстати, работает до сих пор?)

И попутные вопросы, что "включают" следющие переменные

//#define TEST_MEM   
//#define USE_LOW_EXT
//#define PLAY_WITHOUT_HU
//#define LOG
//#define PRINTUNKOWN
//#define SENDTEST  //for test
//#define HEXDUMP
//#define ENABLE_CRC

Заранее благодарен!
 


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 15 Dec 2007, 15:17
Quote
Мусор в каком плане? Некорректное чтение секторов?
Да

 CHS_ACCES_FIRST - должен быть закоментирован.
Еще две функции

void WriteBYTE(u08 addr, u08 dat)
u08 ReadBYTE(u08 addr)



asm volatile ("nop");      // allow pin change      
   cbi(PORTB, 1);             // set DIOR lo
   asm volatile ("nop");      // allow pin change                  
   asm volatile ("nop");      // allow pin change         
         


там тоже NOP надо подправить

//#define TEST_MEM   
//#define USE_LOW_EXT
для отладки

TEST_MEM     проверка внешней  памяти
#define PRINTUNKOWN            вывод неопознанных комманд IPBUS
//#define PLAY_WITHOUT_HU  работа без магнитофона
/#define LOG  лог обмена по IPBUS
HEXDUMP      не используется
ENABLE_CRC осталась от прежних версия незнаю работает ли


если включить  ENABLE_SERIAL  то в прошивке просто не остается места Компилятор должен ругаться.
Поэтому надо на время чегото выключит, например TAG(файл mpeg.c закоментировать #define TAGON)

Вообще я посетовал бы такой алгоритм:
выключить TAGON
включить ENABLE_SERIAL,TEST_MEM, PLAY_WITHOUT_HU (забыл)
скомпилировать и загрузить прошивку
подлючить к COM порту
в терминале должно появиться 'TEST mem ok' или ошибки памяти
это можно сделать без винта и HU
убедились что память и UART работают

выключаем TEST_MEM

теперь плейр должен вывести 'Init ok\nGoing to main loop...'  начать играть .Если нет играемя с  NOP's


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 15 Dec 2007, 16:24
Еще можно включить PWR_BEEPS 
если есть писк, VS1001 работает


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 15 Dec 2007, 17:30
Спасибо за подробное разъяснение. Ситуация становится более менее ясной.
Quote
Еще можно включить PWR_BEEPS 
если есть писк, VS1001 работает
писк есть. Более того загонял тестовую прошивку yampp3/usb. Все тесты проходит на ура. Т.е аппаратно все работает.
Прошивка Виталия тоже. Музыка воспроизводится.  UART-ом переключал песни, папки, прокрутку и т д.

Quote
там тоже NOP надо подправить
насколько я понимаю их количество следует изменять пропорционально во всех указанных Вами функциях? Обычные временные задержки? Есть ограничение сверху по их количеству?

Quote
если включить  ENABLE_SERIAL  то в прошивке просто не остается места Компилятор должен ругаться.
Поэтому надо на время чегото выключит, например TAG(файл mpeg.c закоментировать #define TAGON)

Вообще я посетовал бы такой алгоритм:
выключить TAGON
включить ENABLE_SERIAL,TEST_MEM, PLAY_WITHOUT_HU (забыл)
скомпилировать и загрузить прошивку
подлючить к COM порту
в терминале должно появиться 'TEST mem ok' или ошибки памяти
это можно сделать без винта и HU
убедились что память и UART работают

выключаем TEST_MEM

теперь плейр должен вывести 'Init ok\nGoing to main loop...'  начать играть .Если нет играемя с  NOP's

Очень ценная информация! Именно это хотел узнать.Спасибо. Сегодня попробую.

Еще вопрос - тип файловой системы FAT32 или FAT32LBA? Идентификаторы у них разные. 0B и 0С если не ошибаюсь. Или тупо форматнуть виндой и не заморачиваться?


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 15 Dec 2007, 17:34
Если кто будет повторять конструкцию - замечен небольшой баг в схеме (yampp162.sch) - сигнал сброса VRST с PD5, правильно будет - с PD2. На плате (yampp_162_v2_R1.pcb) ошибки нет!
Да и вообще pcb полностью без ошибок.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 15 Dec 2007, 17:54
Quote
Или тупо форматнуть виндой и не заморачиваться?
Лучше из под доса. У Винды на все свое мнение :)

Quote
насколько я понимаю их количество следует изменять пропорционально во всех указанных Вами функциях?

Да.
Обыкновенные временные задержки
Количество от 1  и пока не заработает но не больше 10
Чтобы посмотреть что читатеся добавте это код
Code:
{
    u16 i;
for(i=0;i<512;i++)
    {

UART_Printfu08( FAT_CACHE[i]);
PRINT(" ");
}
}
   
после
#else
   // read partition table
   ATA_ReadLBA0(0,   1, FAT_CACHE);
#endif
в функции u08 init_fat(void)  файл fat.c


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 00:00
Продолжаю ..
CHS_ACCES_FIRST закоментировал.
TAGON выключил.
ENABLE_SERIAL,TEST_MEM, PLAY_WITHOUT_HU включил.

>mem test ok.
==
добавил вывод FAT_CACHE на терминал.
Убрал  TEST_MEM.

итог: плейер пропикивает три раза, висит и перезапускается и т по бесконечному циклу.
терминал молчит. Хотя, пробел выводит.
===
CHS_ACCES_FIRST раскоментировал.
виснуть перестал. Пищит три раза и выводит 512 нулей))
===
добавил в Fat.c (то, что выделено):
#else
   // read partition table
   ATA_ReadLBA0(0,   1, FAT_CACHE);
#endif
   // read partition table
   ATA_ReadLBA0(0,   1, FAT_CACHE);

#ifdef ENABLE_SERIAL
   {
   u16 i;
   for(i=0;i<512;i++)
       {
      
       UART_Printfu08( FAT_CACHE);
       PRINT(" ");
      }
   }
#endif   

итог - пищит три раза, на терминале:
Code:
33 C0 8E
D0 BC 00 7C FB 50 07 50 1F FC BE 1B 7C BF 1B 06 50 57 B9 E5 01 F3 A4 CB BE BE 07
 B1 04 38 2C 7C 09 75 15 83 C6 10 E2 F5 CD 18 8B 14 8B EE 83 C6 10 49 74 16 38 2
C 74 F6 BE 10 07 4E AC 3C 00 74 FA BB 07 00 B4 0E CD 10 EB F2 89 46 25 96 8A 46
04 B4 06 3C 0E 74 11 B4 0B 3C 0C 74 05 3A C4 75 2B 40 C6 46 25 06 75 24 BB AA 55
 50 B4 41 CD 13 58 72 16 81 FB 55 AA 75 10 F6 C1 01 74 0B 8A E0 88 56 24 C7 06 A
1 06 EB 1E 88 66 04 BF 0A 00 B8 01 02 8B DC 33 C9 83 FF 05 7F 03 8B 4E 25 03 4E
02 CD 13 72 29 BE 52 07 81 3E FE 7D 55 AA 74 5A 83 EF 05 7F DA 85 F6 75 83 BE 29
 07 EB 8A 98 91 52 99 03 46 08 13 56 0A E8 12 00 5A EB D5 4F 74 E4 33 C0 CD 13 E
B B8 00 00 80 37 35 15 56 33 F6 56 56 52 50 06 53 51 BE 10 00 56 8B F4 50 52 B8
00 42 8A 56 24 CD 13 5A 58 8D 64 10 72 0A 40 75 01 42 80 C7 02 E2 F7 F8 5E C3 EB
 74 8D A5 A2 A5 E0 AD A0 EF 20 E2 A0 A1 AB A8 E6 A0 20 E0 A0 A7 A4 A5 AB AE A2 0
0 8E E8 A8 A1 AA A0 20 AF E0 A8 20 A7 A0 A3 E0 E3 A7 AA A5 20 AE AF A5 E0 A0 E6
A8 AE AD AD AE A9 20 E1 A8 E1 E2 A5 AC EB 00 8E AF A5 E0 A0 E6 A8 AE AD AD A0 EF
 20 E1 A8 E1 E2 A5 AC A0 20 AD A5 20 AD A0 A9 A4 A5 AD A0 00 00 00 00 00 00 00 0
0 00 00 00 00 00 00 00 00 00 00 8B FC 1E 57 8B F5 CB 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 30 20 B7 90 00 00 80 01 01 00 0C FE FF FF 3F 00 0
0 00 D9 E5 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 55 AA Init ok
Going to main loop...
пошел играть. Тут у меня чуть не случился орг..м)) В общем по быстрому выключаю PLAY_WITHOUT_HU. включаю TAGON.
 Итог - голова видит трек, похоже дает команду на плей, время стоит и перезагружается.
===
выключаю TAGON.
Итог - голова увидела трек, время пошло, все запело, но при попытке переключить треки - перезагруз головы.
===
включил LOG и UART, хотел глянуть чего там голова передает - ошибка PRINT_MESSAGE в IP_bus.c при компиляции.
==
Далее CHS_ACCES_FIRST закоментировал.
LOG, TAGON выключил.
ENABLE_SERIAL,PLAY_WITHOUT_HU включил.

и игрался nop-ами при помощи след конструкции:
Code:
{
u08 i;
for(i=0;i<NUMBER_OF_NOP;i++)
        {
asm volatile ("nop");
      }
    }


в constant.h добавил #define NUMBER_OF_NOP 2 // задержка
Ни в какую не выводит. Просто висит.
Вот такие пироги.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 00:49
верните все назад и 'nop' тоже
закоментируйте CHS_ACCES_FIRST
раскоментируйте    
//delay10us();   в функции u08 ATA_ReadLBA0(u32 LBA, u08 NumSectors, u08 *Buffer) файл ata_if.c

если не поможет
надо определить где виснет плеер
ставте

PRINT("START funname");
вызов функции
PRINT("END   funname");

в цепочке init_fat()

например
PRINT("START init_fan()")
init_fat();
PRINT("END init_fan()")

обязательно закоментируйте USE_LOW_EXT





Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 01:13
понял.Сейчас попробую.
В принциеп все вроде как заработало. Через одно место правда) Частенько перезгружаясь, не выдавая теги и не всегда переключая треки) Но уже что то. Кстати, на кнопку Band реагирует нормально. Чего то там меняется на экране HU.
 И еще - у вас хватает места в прошивке под TAGON? У меня уже начинает ругаться когда включаешь. Хотя UART и пр выключены.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 01:16
Quote
и игрался NOP-ами при помощи след конструкции:
так играть NOP нельзя    :!: :!: :!:
только добавлять или убирать
asm volatile ("nop"); !!!!!!!!!!!!!!!!!!!!!!!!!!!


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 01:22
Quote
И еще - у вас хватает места в прошивке под TAGON
все хватает У Вас какая версия avr нужна  WinAVR 20040404
Когда грузите файл в yaap программа не должна вылезать за 0x4000


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 01:29
WinAVR-20040720, с этим разберусь я думаю. Наверное стоит повесить вашу версию. Разницы нет конечно, но на всякий случай. 
за 0x4000 в любом случае не вылазит. Странно, но при включении TAGON он даже не пищит. а тупо ресетится по циклу.
Я уже думаю не бракованная ли у меня mega. Может 12 мгц ей слишком много?)

Все таки нужно добить CHS_ACCES_FIRST. Кстати, это оч важно, раскоментирована она или нет, с точки зрения проигрывания файлов. Или с точки зрения HU?

Спасибо за помощь! Без Вас я скорее всего уже выкинул бы все в окошко))


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 01:40
потыкался сейчас в кнопки HU.
Code:
"Функцию можно включить/выключить тоже из дополнительного меню. (Нажимается BAND 2 раза, на дисплее
отображается A-0X, где X - 0 режим выключен,1-включен, клавишами поиска треков изменяется, клавишей следующего диска
подтверждается)
Работа функции: если режим включен и в текущей директории найден плейлист, то начинается проигрывание по плейлисту (причем
функции RDM,SCAN,RPT работают только внутри плейлиста).При ручном выборе диска текущий плейлист аннулируется и ищется новый.

Перекодировка из Cyrillic UNICODE и ANSI в латиницу. Работает для имен файлов и тегов ID3.

Поддержка тэгов ID3 v1 и v2. В v2 фрейм 'TALB' - название альбома, 'TIT2' - название песни
Функцию можно включить/выключить тоже из дополнительного меню.(Нажимается BAND 4 раза, на дисплее
отображается E-0X, где X - 0 режим выключен,1- включен ID3 V2, 2- включен ID3 V1, 3- включен ID3 V2 и V1)
клавишами поиска треков изменяется, клавишей следующего диска подтверждается)

Отсчет времени в обратную сторону. Функцию можно включить/выключить тоже из дополнительного меню.
(Нажимается BAND 3 раза, на дисплее отображается L-0X, где X - 0 режим выключен,1- включен
клавишами поиска треков изменяется, клавишей следующего диска подтверждается)"

эти фунции работают. Работает пауза. Но как дело доходит до переключения трека или папки - плейер перезагружается. Голова тоже. (следствие перезагрузки плейера?)


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 01:40
насчет версии это достаточно важно т.к. используетя asm оптимизация
 CHS_ACCES_FIRST должен быть закоментирован
Насчет кварца Вы уверены что он точно 12 мгц может бракованный .
Как вы выставляете флаги mege при программировании.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 01:42
Quote
потыкался сейчас в кнопки HU.
при выключенном  CHS_ACCES_FIRST или нет


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 01:47
завтра качну вашу версию WinAVR.
Фьюзы: (yapp) галки стоят в:
1.CKSEL0
2.SUT0
3.SUT1
4.BOOTRST
5.BOOTSZ1
6.SPIEN

во всех остальных галочки отсутствуют
===
при включенном CHS_ACCES_FIRST. Пока не могу добиться определения винта при выключенном. Ваш метод еще не пробовал. Складывается ощущение, что компилер не совсем верно обрабатывает исходники. Сижу чз GPRS, завтра качну с нормального инета вашу версию WinAVR.Там будет виднее.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 01:55
УРА!! Решил проблему перезагрузки!!
Убрал галочку с BOOTRST во фьюзах меги)))

Теги тож влезли!!! Закоментировал функцию LIST:)
На данном этапе все работает как надо, кроме перемотки по песне. Тупо виснет.
Пока еще на раскоменитрованном CHS_ACCES_FIRST.
nop вернул на место.

 Но то что есть уже - меня сильно радует!!


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 01:58
 :D :D :D


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 02:02
Если работает при включеном    CHS_ACCES_FIRST  Это неправильно. Добавлением ATA_ReadLBA0(0,   1, FAT_CACHE);
Вы просто затираете  FAT_CACHE считанный ATA_ReadCHS0(1, 1, 1, 1, FAT_CACHE); Надо чтобы работало без CHS_ACCES_FIRST


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 02:08
Понятно. Мозги уже в кучу просто) И Вас достал еще)
Сейчас займусь этим вопросом.
А что за версия yapp? у меня другая, даже флаги по другом зовутся, CKOPT вообще отсутствует))
 


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 02:09
про фьюзы смотрите http://www.vitat.spb.ru/files/ip-bus/lockbits&fuses.jpg
у меня версия 0.6


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 02:13
да да, я увидел это окошко. Просто с моей версии yapp оно совсем другое) вот и пошутил. В общ выставил как надо, кроме BODLEVEL(0). Если его ставить - начинает постоянно ресетится. Глюк да и только.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 02:15
если вас не затруднит - пришлите вашу версию yapp на efko(собака)bk.ru Буду очень благодарен! Скачанная с сайта Джаспера - кривая ужасно. Что т не то они там выложили видно.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 02:19
 CKOPT  может и не быть т.к. это для 8 меги Скачайте даташит для 162 там подробно все расписано
Я уже забыл как надо точно выставлять а плеер в машине . Только с утра смогу посмотреть


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 02:23
yapp получил. Спасибо.
Флаги ставил по даташиту меги.
Был бы рад увидеть ваши флаги.
с CHS разберусь завтра, сейчас спать надо идти..

В общем, очень доволен, сейчас работает все, за исключением перемотки. Даже теги прокручивает и все переключает без глюков! Спасибо Вам за помощь! И за отличный проект.
Готов поощрить это материально.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 18:48
Вот так у меня стоят fusebits


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 19:22
Продолжаю мучить ямп и Вас) Флаги выставил как у вас.

С помощью PRINT выяснил что затык (при закоментированном CHS FIRST) происходит в функции u08 ExecuteCommand(u08 NumSectors, u08 *Buffer) файла Ata_if.c

 
Code:
do // suppose that NumSectors at least 1
{ // for each sector requested
// loop reading ALT STATUS until BUSY is cleared
CheckBusy(1);
// then read STATUS register to reset interrupt
-> здесь виснет -> u08 err = ReadBYTE(CMD_A + CMD_STATUS);
if (err & SR_ERR) // fail on error
{
#ifdef TXT_ERROR
PRINT_p(PSTR("CMD_ERR\n"));
#endif
SetPlayerError(2,0);  //Error 02 CMD_ERR

return err;
}

Если включить debug ATA, винт определяется и даже начинает играть, заикаясь. Вот что при этом пишет терминал:
Code:
00004089 0004 Error : 00
000040F9 0004 Error : 00
000040FD 0004 Error : 00
0003CCB9 0004 Error : 00
0003CCBD 0004 Error : 00
000040FD 0004 Error : 00
000892C9 0004 Error : 00
000892CD 0004 Error : 00
000040FD 0004 Error : 00
00004089 0004 Error : 00
000BD0F9 0004 Error : 00
000BD0FD 0004 Error : 00
000BD101 0004 Error : 00
000BD105 0004 Error : 00
000001D1 0001 Error : 00
00004099 0004 Error : 00
0000409D 0004 Error : 00
0017C629 0004 Error : 00
0017C639 0004 Error : 00
0017C649 0004 Error : 00
0017C64D 0004 Error : 00
0017C639 0004 Error : 00
0017C629 0004 Error : 00
001C3D89 0004 Error : 00
001C3D99 0004 Error : 00
001C3D9D 0004 Error : 00
001C3D89 0004 Error : 00
0017C629 0004 Error : 00
0000409D 0004 Error : 00
00004089 0004 Error : 00
00200129 0004 Error : 00
00004089 0004 Error : 00
00222DE9 0004 Error : 00
00222DED 0004 Error : 00
00222DF1 0004 Error : 00
00222DF5 0004 Error : 00
0000049C 0001 Error : 00
002EAF09 0004 Error : 00
002EAF0D 0004 Error : 00
002EAF11 0004 Error : 00
00004089 0004 Error : 00
0036B589 0004 Error : 00
0036B599 0004 Error : 00
0036B59D 0004 Error : 00
0036B589 0004 Error : 00
00004089 0004 Error : 00
003A18B9 0004 Error : 00
003A18BD 0004 Error : 00
00004089 0004 Error : 00
003CF989 0004 Error : 00
003CF98D 0004 Error : 00
003CF991 0004 Error : 00
003CF995 0004 Error : 00
000007F6 0001 Error : 00
00504089 0004 Error : 00
0050408D 0004 Error : 00
00004089 0004 Error : 00
00004089 0004 Error : 00
000040F9 0004 Error : 00
000040FD 0004 Error : 00
0003CCB9 0004 Error : 00
0003CCBD 0004 Error : 00
000892C9 0004 Error : 00
000892CD 0004 Error : 00
000BD0F9 0004 Error : 00
000BD0FD 0004 Error : 00
000BD101 0004 Error : 00
000BD105 0004 Error : 00
000001D1 0001 Error : 00
00004099 0004 Error : 00
0000409D 0004 Error : 00
0017C629 0004 Error : 00
0017C639 0004 Error : 00
0017C649 0004 Error : 00
0017C64D 0004 Error : 00
001C3D89 0004 Error : 00
001C3D99 0004 Error : 00
001C3D9D 0004 Error : 00
00200129 0004 Error : 00
00222DE9 0004 Error : 00
00222DED 0004 Error : 00
00222DF1 0004 Error : 00
00222DF5 0004 Error : 00
0000049C 0001 Error : 00
002EAF09 0004 Error : 00
002EAF0D 0004 Error : 00
002EAF11 0004 Error : 00
0036B589 0004 Error : 00
0036B599 0004 Error : 00
0036B59D 0004 Error : 00
003A18B9 0004 Error : 00
003A18BD 0004 Error : 00
003CF989 0004 Error : 00
003CF98D 0004 Error : 00
003CF991 0004 Error : 00
003CF995 0004 Error : 00
000007F6 0001 Error : 00
00504089 0004 Error : 00
0050408D 0004 Error : 00
Init ok
Going to main loop...
000BD0F9 0004 Error : 00
000BD0FD 0004 Error : 00
000BD101 0004 Error : 00
000BD105 0004 Error : 00
000001D1 0001 Error : 00
00004099 0004 Error : 00
0000409D 0004 Error : 00
00004089 0004 Error : 00
000BD0F9 0004 Error : 00
000BD0FD 0004 Error : 00
000BD101 0004 Error : 00
000BD105 0004 Error : 00
00004099 0004 Error : 00
00154509 0004 Error : 00
0015450D 0004 Error : 00
00000000 0001 Error : 00
33 C0 8E D0 BC 00 7C FB 50 07 50 1F FC BE 1B 7C BF 1B 06 50 57 B9 E5 01 F3 A4 CB BE BE 07 B1 04 38 2C 7C 09 75 15 83 C6 10 E2 F5 CD 18 8B 14 8B EE 83 C6 10 49 74 16 38 2C 74 F6 BE 10 07 4E AC 3C 00 74 FA BB 07 00 B4 0E CD 10 EB F2 89 46 25 96 8A 46 04 B4 06 3C 0E 74 11 B4 0B 3C 0C 74 05 3A C4 75 2B 40 C6 46 25 06 75 24 BB AA 55 50 B4 41 CD 13 58 72 16 81 FB 55 AA 75 10 F6 C1 01 74 0B 8A E0 88 56 24 C7 06 A1 06 EB 1E 88 66 04 BF 0A 00 B8 01 02 8B DC 33 C9 83 FF 05 7F 03 8B 4E 25 03 4E 02 CD 13 72 29 BE 52 07 81 3E FE 7D 55 AA 74 5A 83 EF 05 7F DA 85 F6 75 83 BE 29 07 EB 8A 98 91 52 99 03 46 08 13 56 0A E8 12 00 5A EB D5 4F 74 E4 33 C0 CD 13 EB B8 00 00 80 37 35 15 56 33 F6 56 56 52 50 06 53 51 BE 10 00 56 8B F4 50 52 B8 00 42 8A 56 24 CD 13 5A 58 8D 64 10 72 0A 40 75 01 42 80 C7 02 E2 F7 F8 5E C3 EB 74 8D A5 A2 A5 E0 AD A0 EF 20 E2 A0 A1 AB A8 E6 A0 20 E0 A0 A7 A4 A5 AB AE A2 00 8E E8 A8 A1 AA A0 20 AF E0 A8 20 A7 A0 A3 E0 E3 A7 AA A5 20 AE AF A5 E0 A0 E6 A8 AE AD AD AE A9 20 E1 A8 E1 E2 A5 AC EB 00 8E AF A5 E0 A0 E6 A8 AE AD AD A0 EF 20 E1 A8 E1 E2 A5 AC A0 20 AD A5 20 AD A0 A9 A4 A5 AD A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8B FC 1E 57 8B F5 CB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 20 B7 90 00 00 80 01 01 00 0C FE FF FF 3F 00 00 00 D9 E5 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA 0000003F 0001 Error : 00
00004089 0004 Error : 00
000040F9 0004 Error : 00
000040FD 0004 Error : 00
0003CCB9 0004 Error : 00
0003CCBD 0004 Error : 00
000040FD 0004 Error : 00
000892C9 0004 Error : 00
000892CD 0004 Error : 00
000040FD 0004 Error : 00
00004089 0004 Error : 00
000BD0F9 0004 Error : 00
000BD0FD 0004 Error : 00
000BD101 0004 Error : 00
000BD105 0004 Error : 00
000001D1 0001 Error : 00
00004099 0004 Error : 00
0000409D 0004 Error : 00
0017C629 0004 Error : 00
при этом музыка играет.

В принципе такой вариант устраивает. Грешу на винт. У вас какой кстати? У меня 3,5" 10 гигов. По сути не должно быть разницы. Пробовал много винтов, кроме ноутбучных.Еще пара вопросов - при прокрутке по треку жестко уходит в перезагруз. Что можно покрутить?) И еще, где должен показываться битрейт? Странно конечно, одинаковое с Вами железо, а работает по разному.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 19:31
У Вас какая версия прошивки
Загрузите вот это


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 20:18
ок, там какой размер кластера?у меня 8192. На сколько форматить?
Сейчас прошивка 3.04


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 20:22
16384


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 21:22
Загрузил - винт сразу определился. Но треки булькают и скачут. Управление с HU нестабильно. У меня кварцы 12 на меге и 14 на VS.

Кто нибудь еще собирал плейер? Были ли такие проблемы у других?


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 21:29
Подайте на мегу питание через диод прямо на VCC чтобы было около 4


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 22:05
ок, попробую. Спасибо за совет. А в этой прошивке CHS закоментирована?


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 22:06
Да


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 22:11
вот мля.
я сам себе винт спалил. Гребаные нотубушные винты на 5 вольт.Хорошо что там одна музыка была


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 22:23
Бывает.. На 12 В посадили?)
В принципе они щас дешевые. Кстати где разъем на ноутбучный винт брали? Никак найти не могу.

Похоже у меня помехи по питалову. Напихаю кондеров на ноги.
Интересно кстати получается. В 3 версии и в 3.04 наверняка одни функции инициализации ЖД? Если да, то проблема точно в компилере!


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: Sergey on 16 Dec 2007, 22:36
Quote
Бывает.. На 12 В посадили?)
Угадали
Quote
Кстати где разъем на ноутбучный винт брали?
На савеловском рынке рублей 100-150 правда года 1.5 назад

Code:
Похоже у меня помехи по питалову. Напихаю кондеров на ноги.
Быстрей и проще поставить диод Сразу все станет ясно. Вот последняя версия с которой я компилировал у меня все работает на ура


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 23:15
Пасиб за исходники. Картина не изменилась, буду копать в сторону железа. В принципе вопросов больше нет. Тема раскрыта)
Кстати, вот и фото моего чуда инженерной мысли) Плата еще не отмыта, выглядит на фото не очень.

(http://i011.radikal.ru/0712/f1/0eac3b797127t.jpg) (http://radikal.ru/F/i011.radikal.ru/0712/f1/0eac3b797127.jpg.html)
(http://i005.radikal.ru/0712/16/f62c26fe3424t.jpg) (http://radikal.ru/F/i005.radikal.ru/0712/16/f62c26fe3424.jpg.html)
(http://i044.radikal.ru/0712/d6/d060163053e6t.jpg) (http://radikal.ru/F/i044.radikal.ru/0712/d6/d060163053e6.jpg.html)

снял небольшой видеоролик, как он работает и как глючит) попытаюсь выложить.


Title: Re: Вопрос по Fat.c или "постоянная ошибка размера кластера"
Post by: efko on 16 Dec 2007, 23:18
ролик выложил тут http://rutube.ru/tracks/346580.html?v=2615d39f56324415d67ed52a6ff33b82 (1,48 Мб)


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.
Post by: Sergey on 16 Dec 2007, 23:36
Efko вы из Москвы? Давайте я отдам свой плеер во обмен на vs1001 и megu162 и на провод IPBUS
Просто давно хочу сделать на  другой плате. Но все руки не доходили.


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.
Post by: efko on 16 Dec 2007, 23:44
Кстати, забыл представиться. Константин:)
Я из Казани. Меня этот вариант оч даже устраивает) IP-BUS кабель у меня самодельный. Точнее его разъем. Из старых шнурков CD-ROM - audio.


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: efko on 17 Dec 2007, 02:35
Тестовая прошивка. Выводит в com лог работы.
Скорость UART - 38400. Размер кластера 16384. Работает с HU.
Мне помогла при отладке глюков с перемоткой треков.


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: Sergey on 18 Dec 2007, 20:40
Хм. Интересно,  после  того как я сжег винт, я нашел старый нотебучный винт на 1.5Г. С ним у меня начались заикания. Будем разбираться


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: efko on 19 Dec 2007, 10:23
Аналогично. Тупо заливаю 3.04 прошивку - заикания исчезают. Сравнивая прошивки - нашел различия в разных задержках вывода в vs1001. Но залить прошивку не было возможности.
Сейчас постараюсь найти - где конкретно.


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: efko on 19 Dec 2007, 16:19
Хочу добавить - проблема спонтанной перезагрузки плейера и головы полностью разрешилась подачей питания на мегу162 через диод напрямую с VCC.Видимо на этой печатке есть помехи по питанию, ввиду некорректной разводки земли. Также желательны блокировочные конденсаторы 0.1 мкф на дороги питания возле контроллера и памяти.


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: Sergey on 19 Dec 2007, 17:05
Залейте вот эту прошивку Размер кластера 16


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: efko on 20 Dec 2007, 10:41
Залил, все заработало без заиканий! В общем все отлично работает! Могу сказать, что автор действительно довел все до ума.

PS. Заметил что List работает только при количестве папок <12.) но это уже мелочи. Главное ничего не глючит и работает.


Title: Re: Собрал "yampp+emulator в одном" Сергея. Вопросы к автору.(+photo)
Post by: Sergey on 20 Dec 2007, 16:30
Работа LIST зависти от HU. У меня показывает только 16
Последние версии прошивки и платы в ветке 'собрал схему MP3 плейера и эмулятора'