Приехал ко мне звуковой модуль wt588d
Datasheet
Имеет флеш память от 2 до 32 Мбит серии 25xx для хранения файлов и настроек.
Позволяет напрямую подключить динамик до 0,5Вт 8Ом.
Управляется кнопками, либо SPI, либо по однопроводной шине.
Питание 2,8-5,5В, 10мкА в режиме сна.
Существует два варианта модуля: WT588D и WT588D-U. Второй раза в два больше и имеет встроенный usb загрузчик. Я, конечно, легких путей не искал, и выбрал первый в погоне за компактностью.
Загрузка
Для загрузки производитель предлагает программатор. Типа такого. Кроме того, здесь описан способ записи в модуль без usb с помощью модуля с usb. Но это не наш путь. Для загрузки вполне достаточно ардуины.
Сначала необходимо сформировать файл для записи. Для этого существует утилита, работа с которой очень подробно расписана здесь (там же ссылка на скачивание). Добавить к этому нечего. Заливаем звук, выставляем настройки и получаем файл с расширением bin.
Для записи подключил модуль к ардуино по следующей схеме.
Без питания самого модуля (нога 16) и притягивания ресета к земле флешка на связь не вышла.
Для заливки изобразил незатейливую программу (во вложении). Возможно, немного сыровата, но у меня все получилось.
Скетч для ардуино загрузчика под кнопкой "Инструкция" вместе с другими комментариями.
Может, сгодится и для других целей, когда есть необходимость записи SPI флеш памяти.
Управление
Здесь все просто. Однопроводная шина + ресет по даташиту. Без ресета тоже работает.
PHP код:
#define RES 14
#define IO 5
byte i=0;
byte a=0;
void setup(void)
{
pinMode(RES,OUTPUT);
pinMode(IO,OUTPUT);
digitalWrite(RES,HIGH);
digitalWrite(IO,HIGH);
Serial.begin(9600);
//wt_com(3);
}
void loop (void)
{
if(Serial.available()!=0)
{
a=Serial.read();
//Serial.write(a);
wt_com(a);
}
}
void wt_com(byte adr)
{
digitalWrite(RES,LOW);
delay(5);
digitalWrite(RES,HIGH);
delay(17);
digitalWrite(IO,LOW);
delay(5);
for(i=0;i<8;i++)
{
digitalWrite(IO,HIGH);
if(bitRead(adr,i))
{
delayMicroseconds(600);
digitalWrite(IO,LOW);
delayMicroseconds(300);
}
else
{
delayMicroseconds(300);
digitalWrite(IO,LOW);
delayMicroseconds(600);
}
}
digitalWrite(IO,HIGH);
}