uriy 5 14 марта, 2009 Опубликовано 14 марта, 2009 · Жалоба У меня тоже SPI без проблем работает с флешкой AT45DB, правда на скоростях только до 12 МГц. Тут кто-то писал о проблемах на SPI с DMA, без DMA вроде ни у кого никаких проблем не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 15 марта, 2009 Опубликовано 15 марта, 2009 · Жалоба Разобрался!!! Питание ядра VS1053 должно быть 1.8V, у меня было 2.5V Произошло это по причине слепого копипаста обвязки кодека с предыдущего проекта на VS1003 Возможно, сжег VS1053 (при включении питания в аудиотракте шумы, похожие на кипящую кастрюлю с водой) Проблему решил демонтированием VS1053 и заменой на VS1003. В аудиотракте тихо. Кодек завёлся. Так что фин тут непричём ;) Вот рабочая программа: //Работа с аудиокодеком VS1003B-L #include <cdefBF532.h> #define u8 unsigned char #define u16 unsigned short int #define u32 unsigned long int #if 0 //0 - MID, 1 - WAV #include "WAV.c" #define DATA WAV #else #include "MID.c" #define DATA MID #endif void Delay(u32 D) { while(--D); } void Init_PLL(void) { *pSIC_IWR=0x00000001; *pPLL_CTL=0x5000; //VCO=CLKIN*40=400MHz, CLKIN=10MHz(Quartz) *pPLL_DIV=0x0003; //CCLK=VCO/1=400MHz, SCLK=VCO/3=133MHz ssync(); *pVR_CTL=0x00DB; //VLEV=1.2V, GAIN=20, FREQ=1MHz ssync(); idle(); } void Init_SDRAM(void) { while(!(*pEBIU_SDSTAT&1)); *pEBIU_SDSTAT|=0x10; *pEBIU_SDRRC=0x0408; *pEBIU_SDBCTL=0x0013; *pEBIU_SDGCTL=0x0091998D; *(u16*)0=0xBEEF; while(*pEBIU_SDSTAT&8); ssync(); } void Init_FIO(void) { *pFIO_DIR=(1<<2)|(1<<5)|(1<<6); //EEPROM XCS XDCS => OUTPUT *pFIO_FLAG_S=(1<<2)|(1<<5)|(1<<6); //EEPROM XCS XDCS => 1 *pFIO_INEN=(1<<7); //DREQ => INPUT ssync(); } u8 DREQ(void) { u8 dreq; dreq=(*pFIO_FLAG_D>>7)&1; ssync(); return dreq; } void Init_SPI(void) { *pSPI_FLG=0xFF00; //Disable & DeAssert all hardware SPISEL *pSPI_BAUD=22; //SCK=SCLK/2/22=3.(03)MHz < XTALI/4=3.072MHz *pSPI_CTL=0x1001; //Master, CPOL=0, CPHA=0, MSB First, 8Bit ssync(); *pSPI_CTL|=(1<<14); //Enable SPI ssync(); } u8 SPI(u8 spi) { *pSPI_TDBR=spi; ssync(); while(!(*pSPI_STAT&0x0001)); while(!(*pSPI_STAT&0x0020)); return (u8)*pSPI_RDBR; } void VS1003Command(u8 Address,u16 Data) { *pFIO_FLAG_C=(1<<5); //XCS=0 ssync(); SPI(0x02); SPI(Address); SPI(Data>>8); SPI(Data&0xFF); *pFIO_FLAG_S=(1<<5); //XCS=1 ssync(); while(!DREQ()); } void VS1003Data(u8 Data) { *pFIO_FLAG_C=(1<<6); //XDCS=0 ssync(); SPI(Data); *pFIO_FLAG_S=(1<<6); //XDCS=1 ssync(); } void Init_Codec(void) { VS1003Command(0x00,0x0804); //NEW Mode, Reset Delay(1000000); VS1003Command(0x02,0x0000); //Equalizer Off VS1003Command(0x03,0x9000); //CLKI=XTALI*(3.0+1.0)=49.152MHz, XTALI=12.288MHz(Quartz) VS1003Command(0x05,11025|0); //11025Hz, Mono VS1003Command(0x0B,0x0000); //Volume Maximum } void main(void) { u32 o=0; Init_PLL(); Init_SDRAM(); Init_FIO(); Init_SPI(); Init_Codec(); while(1) { if(!(o&0x1F)) while(!DREQ()); VS1003Data(DATA[o++]); if(o==sizeof(DATA)) o=0; } } Эксперты, прокомментируйте код пожалста! Есть подозрение, что лишние ssync'и вставил... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба Пробовал манипулировать битом WOM в регистре SPI_CTL Почему-то не заработало с открытым стоком, хотя пулапы стоят на MISO/MOSI/SCK=100кОм На чипселектах тоже =4,7кОм Почему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба не потому ли что резисторы 100ком - слишком много? или я чего-то недопонимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MikePic 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба 100K - много. Какая частота клоков? Чем больше значение сопротивления подтягивающего резистора, тем ниже скорость нарастания фронта из 0 в 1. Ткнитесь осциллом, всё увидите. Есть формулы для расчёта подтягивающих резисторов в заисимости от характеристик сигнала. И вообще - зачем вам работа с открытым стоком? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба 100K - много. Какая частота клоков? 3 МГц Есть формулы для расчёта подтягивающих резисторов в заисимости от характеристик сигнала Если нетрудно, напишите её плиз И вообще - зачем вам работа с открытым стоком? В переводе chapter10.pdf сказано: В системах SPI с несколькими ведущими или несколькими ведомыми устройствами выходные выводы данных ( MOSI и MISO) могут быть сконфигурированы как выходы с открытым стоком. Это предотвратит возникновение конфликтных ситуаций и возможное повреждение формирователей на этих выводах. В данном режиме необходимо использовать внешние подтягивающие к питанию (pullup) резисторы на выводах MOSI и MISO. У меня на SPI висят AT25256, кодек и SD карта Хочу перестраховаться чтоб не сжечь формирователи, поэтому открытый сток. Хотя без него работает... В данном случае он нужен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MikePic 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба 3 МГц Если нетрудно, напишите её плиз Приаттачил даташит от NXP про RTC, в нём есть раздел по расчёту подтягивающих резюков для I2C, всё размусолено подробно. Для 100К резисторов 3МГц - очень большая частота. user.manual.real.time.clocks.pdf У меня на SPI висят AT25256, кодек и SD карта Хочу перестраховаться чтоб не сжечь формирователи, поэтому открытый сток. Хотя без него работает... В данном случае он нужен? И что, у вас в системе несколько мастеров? Или кто-то может "случайно" стать мастером, кроме BF? Подтяжка в вашем случае нужна на моменты, пока не сконфигурировался мастер, чтобы линии в воздухе не висели, а на 3МГц лучше использовать "железную" лог.1, обеспечиваемую транзистором порта BF. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба За аттач спасибо:) у вас в системе несколько мастеров? один - BF :) 1) тоесть ОpenDrain нужен только если более одного мастера, так? 2) подтяжки mosi/miso/sck/spi_cs не лишние? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MikePic 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба 1) Да 2) Рекомендуемые. Особенно CS-ы всех девайсов, которые к SPI подключены, должны быть притянуты к неактивному уровню ( в 99% - это лог. 1 ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба вопрос по подключению мультимедиа карточек и карт СД. что делать с выводами 8 и 9 которые в режиме SPI(интересует именно он) не используются? например в SAM7X256EK они висят в воздухе в тоже время находил сведения о том что их надо подтягивать к питанию резисторами есть подозрение на то, что некоторые карты в режиме SPI из-за этих резисторов иногда не запускаются как правильнее - подтянуть выводы 8,9 или оставить в воздухе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 18 марта, 2009 Опубликовано 18 марта, 2009 · Жалоба есть подозрение на то, что некоторые карты в режиме SPI из-за этих резисторов иногда не запускаются Есть наблюдение, что некоторые карты без этих резисторов виснут во время работы. А вот запускаются все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MikePic 0 18 марта, 2009 Опубликовано 18 марта, 2009 · Жалоба У ChaN-а линии DAT1 и DAT2 подтянуты к +3,3В через резисторы 47К У меня порядка 7 типов флэшек microSD нормально запускались и работали без этих резисторов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 18 марта, 2009 Опубликовано 18 марта, 2009 · Жалоба У меня порядка 7 типов флэшек microSD нормально запускались и работали без этих резисторов. у микро-СД команды(в SPI режиме) теже что у обычной СД? только разводка ног другая, так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MikePic 0 19 марта, 2009 Опубликовано 19 марта, 2009 · Жалоба у микро-СД команды(в SPI режиме) теже что у обычной СД? только разводка ног другая, так? Спецификация на физический уровень одна и та же, соответственно - вся логика и команды те же. Отличия - на одну ногу Vss в SD больше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться