Цитата(tMauzer @ May 21 2010, 19:44)

Не поможет ли кто примерчиком общения с AT25DF641 флэшкой?
AT25 - EEPROM, AT26 - FLASH. Вот о чём пытался намекнуть вам
zltigo.
Вот минимальный набор для работы с at25:
Код
#include "at25.h"
#define AT25_CS 3, 3, L // at25 чипселект
// EEPROM commands
#define EE_READ 3
#define EE_WRITE 2
#define EE_WREN 6
#define EE_WRDI 4
#define EE_RDSR 5
#define EE_WRSR 1
// EEPROM status
#define SS_WRITING 0x01 // Write cycle in progress
#define SS_WRITE_ENABLE 0x02 // Write enabled
void at25_init(void)
{
direct(AT25_CS,O); // переключаем ногу чипселекта на выход
off(AT25_CS); // отключаем (высокий уровень)
}
void at25_command(char cmd)
{
on(AT25_CS);
spi_w(cmd);
}
uint8_t at25_read_status(void)
{
int result;
at25_command(EE_RDSR);
result = spi_r8();
off(AT25_CS);
return result;
}
uint8_t at25_read_byte(uint16_t adr)
{
uint8_t result;
at25_command(EE_READ);
spi_w(adr >> 8);
spi_w(adr);
result = spi_r8();
off(AT25_CS);
return result;
}
void at25_read(uint16_t adr, uint8_t *bf, uint16_t len)
{
at25_command(EE_READ);
spi_w(adr >> 8);
spi_w(adr);
while (len--)
*bf++ = spi_r8();
off(AT25_CS);
}
void at25_write_byte(uint16_t adr, uint8_t data)
{
at25_command(EE_WREN);
off(AT25_CS); // toggle CS, necessary for WREN
at25_command(EE_WRITE);
spi_w(adr >> 8);
spi_w(adr);
spi_w(data);
off(AT25_CS);
while (at25_read_status()& SS_WRITING);
}
void at25_write(uint16_t adr, uint8_t *bf, uint16_t len)
{
while (len--)
at25_write_byte(adr++, *bf++);
}
Если бы я знал, что такое электричество...