Отговори на тема  [ 7 мнения ] 
18F4525 + STA 013 + SD Card = проблем с SPI 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Мар 04, 2007 12:00 am
Мнения: 8
Местоположение: Варна
Мнение 18F4525 + STA 013 + SD Card = проблем с SPI
Здравейте, стигнах до една задънена улица и искам да се допитам до вас за решение на проблема ми.
Правя проект с изброените в заглавието на темата чаркалаци.
Идеята на проекта е да стане MP3 плеър, който да работи с SD карти форматирани с FAT16.
Проблемите с SD картата успях да ги преборя и всичко е наред, файловете се четат.
MP3 декодера също съм го подкарал имам звук на изхода.
Проблема ми е следния: как най-оптимално да чета данни от картата и да ги пращам на декодера?
И двете устройства са свързани към SPI. Честотата на SPI при нормална работа ми е 6,25Mhz.
Първоначалната ми идея беше да чета един сектор от паметта (512 байта) да го запиша в масив след, което да изпращам масива към декодера.
Получи се нещо... имаше звук на изхода но беше накъсан.
Тестов фаил от около 2секунди с битрет 40Kbit/s се просвирваше за около 5-6секунди на пресекулки.

Втори вариант: При всяко четене на байт от SD-картата да използвам предходния прочетен байт за да инициирам транфера по шината вместо стандартоното изпращане на 0хFF. Eдновременно съм селектирал и SD картата и MP3 декодера. По този начин всеки прочетен от SD картата байт при следващото четене го пращам към MP3 декодера и към SD картата. На теория ми се стори добре но на практика зле... данните, които чета от SD и после ги пращам по шината объркват картата и почва да ми връща различни данни.

Дайте съвет как мога да си реша проблема с препращането на информацията към декодера.
Един от вариантите е да свържа CLOCK и SDI на декодера към два произволни крака на процесора и да емулирам тактуването и пращането на данни по SPI. Но на първо време не искам да правя такива тарикатлъци :).


Вто Авг 28, 2007 12:22 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Мар 04, 2007 12:00 am
Мнения: 8
Местоположение: Варна
Мнение 
Явно сам ще си отговарям :)
Подкарах го... или поне нещо такова. В крайна сметка имах едно забавяне някъде из функциите което не бях догледал. Заради него беше насичането.
В крайна сметка преместих декодера на отделни крачета които върху, които емулирам сериен интерфейс. А тактиката с четенето е да се чете един сектор от 512B след което да се просвирва и да се чете следващия. Работи и с файлове 128kbit/s 44.1KHz. В момента имам друг проблем. Или ми ги свири много бързо или пък прекъсва... явно нещо не съм си настроил декодера.
В крайна сметка може да се каже че работи.


Вто Авг 28, 2007 10:08 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 07, 2005 9:17 pm
Мнения: 57
Мнение 
Не съм много запознат с STA013 и набързо погледнах в Google че има I2C за команди и SPI за данни.

Защо не пробваш да свържеш STA013 SDI към SDO на SD картата. Селектираш ги и двата чипа едновременно в момента на четенето на данните от SD картата.


Сря Авг 29, 2007 10:55 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Мар 04, 2007 12:00 am
Мнения: 8
Местоположение: Варна
Мнение 
За това нямаше да се сетя никога :)
За сега работи с "емулиран" SPI и I2C интерфейси и не смятам да го бутам защото следващата седмица ще трябва да го демонстрирам. И сега пиша документация... аман от формалности покрай дипломните работи. Като го демонтрирам ако не ми го вземат ще продължа да го мъча.

При този вариант обаче ще има една ситуация. STA-то си иска данните като вдигне DATA_REQ линията. Има някакъв входен буфер, който не е ясно колко точно е голям. В един сайт предполагаха, че е 1600 байта. Та ако по време на четенето буфера се напълни трябва да за известно време транзакцията да спре. Аз обаче така или иначе съм почнал вече четене на блок и трябва да си го довърша. Пак ще набутам данните във входен буфер и при следващото вдигане на request-а да продължа от там където е спряло.
Като остане време ще пробвам... ще видя какво се получава.

Имам един генерален проблем обаче. Зареждам в декодера конфигурационния фаил от сайта на ST. След това му настройвам и честотата на кварца пак според една таблица в PDF-а. И в крайна сметка неще да свири файлове самплирани на по-малко от 48KHz. Ако честота е по-малка ги свири бързо. Ако е 48KHz всичко е както трябва.


Чет Авг 30, 2007 5:59 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 07, 2005 9:17 pm
Мнения: 57
Мнение 
Ако решиш да го продължиш, пиши ми на ICQ и ще ти осигуря един dsPIC33 с два SPI да можеш да закачиш по отделно SD и STA013.

Аз като си правих дипломната работа през 1999, беше някакъв контролер и трябваше да има LCD. Писах че се прави по поръчка от определени фирми и се разминах само със схема и програма на асемблер за PIC16. Там където завърших никой не разбираше от PIC16 и комисията не ми задаваше много въпроси. Просто не знаеха какво да питат :).


Пет Авг 31, 2007 12:02 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 02, 2004 7:22 pm
Мнения: 140
Мнение 
Аз съм направил точно последния вариант, но с МЕГА, като REQ е свързан към външно прекъсване на мегата и пращам по един байт в прекъсването и едновременно чета следващия от картата. Докато изпращам от софтуерно емулиран интерфейс на асемблер към STA-то хардуерния SPI чете следващия байт. I2C-то съм го оствил софтуерно, то и без това е low priority, някой ден може и това да оправя. При всеки байт обаче се прави проверка, дали е свършил сектора и съответно клъстера, което отнема ценно време, но се справя с 360кбита МР3-ки. SPI e на мах - 8МХз, но софтуерния интерфейс ги праща бавничко. При PIC-овете става по-лесно - bsf PORTA,0 , bcf PORTA,0, при мегата е супер шибано, независимо че е на 16MIPSa, трябват 6-7 инструкции, а на C да не говорим... Бях пробвал да чета 512байта наведнъж, но не става, насича. Междувременно имах един проблем, който не реших - може да имаш идея - Не всеки път STA-то захапва файла - и при различните файлове различно, най-общо няма никаква логика. Няма файл който след някой опит да не тръгне, но като че ли няма и такъв, който всеки път тръгва да свири. Забиването става като STA-to по някаква причина си изкарарва клока 14МХц на REQ извода си и така вкарва Мегата постоянно в прекъсване... Рестартирам с уочдога и наново, но това не е решение..


Пет Авг 31, 2007 3:28 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Нед Мар 04, 2007 12:00 am
Мнения: 8
Местоположение: Варна
Мнение 
freestyler, мерси за предложението за Пик-а. Аз по принцип твърдо съм решил в бъдеще да си направя някакво мултимедийно изпълнение за колата щото ми писна да ми гепат СД-тата... но това е в по-далечното бъдеще защото сега съм загърбил доста задачи заради дипломната и нещата се натрупват.

Относно моя проект, открих магическата комбинация 112Kbps @ 48KHz. Работи много добре... от време на време леко изсъсква или губи синхронизация. STA-то не ми прави проблеми, за сега си работи нормално. Доста пъти го пусках и спирах... не е забивало.
Имам някакво странно усещане, че нещо съм обаръкал с DATA_REQ линията. Отначало постоянно си беше в 0 и PIC-а чакаше ли чакаше.... След това закачих линията с един резистор от 50K към Vcc сега пък постоянно е в 1. С моя осцилоскоп не мога да я хвана кога слиза в 0. Може пък и да не слиза изобщо ако скоростта ми на трансфер е бавна... но пък не мога да пробвам с по-нисък битрейт понеже няма 48KHz и почва да свири бързо.

За сега работи според теорията на проф. Нагоденко и асистента му Натъкменко :D


Пет Авг 31, 2007 11:43 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 7 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни