Перейти к содержанию
    

У меня тоже SPI без проблем работает с флешкой AT45DB, правда на скоростях только до 12 МГц. Тут кто-то писал о проблемах на SPI с DMA, без DMA вроде ни у кого никаких проблем не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разобрался!!!

 

Питание ядра 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'и вставил...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал манипулировать битом WOM в регистре SPI_CTL

Почему-то не заработало с открытым стоком, хотя пулапы стоят на MISO/MOSI/SCK=100кОм

На чипселектах тоже =4,7кОм

 

Почему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не потому ли что резисторы 100ком - слишком много?

или я чего-то недопонимаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

100K - много. Какая частота клоков? Чем больше значение сопротивления подтягивающего резистора, тем ниже скорость нарастания фронта из 0 в 1. Ткнитесь осциллом, всё увидите. Есть формулы для расчёта подтягивающих резисторов в заисимости от характеристик сигнала. И вообще - зачем вам работа с открытым стоком?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

100K - много. Какая частота клоков?

 

3 МГц

 

Есть формулы для расчёта подтягивающих резисторов в заисимости от характеристик сигнала

 

Если нетрудно, напишите её плиз

 

И вообще - зачем вам работа с открытым стоком?

 

В переводе chapter10.pdf сказано:

 

В системах SPI с несколькими ведущими или несколькими ведомыми

устройствами выходные выводы данных (

MOSI и MISO) могут быть

сконфигурированы как выходы с открытым стоком. Это предотвратит

возникновение конфликтных ситуаций и возможное повреждение

формирователей на этих выводах. В данном режиме необходимо использовать

внешние подтягивающие к питанию (pullup) резисторы на выводах

MOSI и

MISO.

 

У меня на SPI висят AT25256, кодек и SD карта

 

Хочу перестраховаться чтоб не сжечь формирователи, поэтому открытый сток.

Хотя без него работает...

 

В данном случае он нужен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 МГц

Если нетрудно, напишите её плиз

Приаттачил даташит от NXP про RTC, в нём есть раздел по расчёту подтягивающих резюков для I2C, всё размусолено подробно. Для 100К резисторов 3МГц - очень большая частота.

user.manual.real.time.clocks.pdf

 

У меня на SPI висят AT25256, кодек и SD карта

 

Хочу перестраховаться чтоб не сжечь формирователи, поэтому открытый сток.

Хотя без него работает...

 

В данном случае он нужен?

И что, у вас в системе несколько мастеров? Или кто-то может "случайно" стать мастером, кроме BF? Подтяжка в вашем случае нужна на моменты, пока не сконфигурировался мастер, чтобы линии в воздухе не висели, а на 3МГц лучше использовать "железную" лог.1, обеспечиваемую транзистором порта BF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За аттач спасибо:)

 

у вас в системе несколько мастеров?

 

один - BF :)

 

1) тоесть ОpenDrain нужен только если более одного мастера, так?

2) подтяжки mosi/miso/sck/spi_cs не лишние?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Да

2) Рекомендуемые. Особенно CS-ы всех девайсов, которые к SPI подключены, должны быть притянуты к неактивному уровню ( в 99% - это лог. 1 )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вопрос по подключению мультимедиа карточек и карт СД.

 

что делать с выводами 8 и 9 которые в режиме SPI(интересует именно он) не используются?

 

например в SAM7X256EK они висят в воздухе

в тоже время находил сведения о том что их надо подтягивать к питанию резисторами

 

есть подозрение на то, что некоторые карты в режиме SPI из-за этих резисторов иногда не запускаются

 

как правильнее - подтянуть выводы 8,9 или оставить в воздухе?

post-41584-1237333081_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть подозрение на то, что некоторые карты в режиме SPI из-за этих резисторов иногда не запускаются

Есть наблюдение, что некоторые карты без этих резисторов виснут во время работы. А вот запускаются все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У ChaN-а линии DAT1 и DAT2 подтянуты к +3,3В через резисторы 47К

У меня порядка 7 типов флэшек microSD нормально запускались и работали без этих резисторов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня порядка 7 типов флэшек microSD нормально запускались и работали без этих резисторов.

 

у микро-СД команды(в SPI режиме) теже что у обычной СД?

только разводка ног другая, так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у микро-СД команды(в SPI режиме) теже что у обычной СД?

только разводка ног другая, так?

Спецификация на физический уровень одна и та же, соответственно - вся логика и команды те же. Отличия - на одну ногу Vss в SD больше

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...