Страница 1 из 1

Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 10:36:51
Denis-d20
Добрый день. Нарисовалась проблемка начал использовать внешнюю память M25PE40 в принципе с инструкциями разобрался пишется читается но не коректно мож кто сней разбирался и чего подскажет :shock:

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 10:41:07
Satyr
Ты вокруг да около не ходи, пиши сразу в чем проблема.

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 10:52:09
Denis-d20
не могу точно сказать толи с адресацией проблема толи с чем другим но байты заисываются через один

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 11:06:14
Denis-d20
Вот код

void WP(unsigned long int adres) {
char add[3];
WREN(); // инструкция разрешения записи
add[0]=adres;
add[1]=adres>>8;
add[2]=adres>>16;
CS=0; // s вниз
spi(0x0A);
spi(add[2]);
spi(add[1]);
spi(add[0]);
for (i=0;i<b.m;i++) {
if (cc|=0)
{
spi(getchar());
cc--;
}

else
{
spi(0);
};
};
CS=1;// s вверх
}

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 11:10:39
Satyr
с какой то похоже spi флешкой, вроде sst25fv32, пол дня тупил с такой проблемой - там сигнал CE не должен сниматься не только при передачи одного байта, а на всю операцию целиком, или все сбрасывается. такую тему проверь.

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 11:15:26
Denis-d20
в смысле пока не запишу все сообщение а не страницу?

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 11:23:43
Satyr
Denis-d20 писал(а):в смысле пока не запишу все сообщение а не страницу?
Смотря как пишешь - по байту или кусками.

у меня запись примерно так происходит

void Write_Cont(unsigned long Dst, unsigned char *buf, unsigned long no_bytes)
{
unsigned long bytes_to_write;
unsigned char *ptr;

bytes_to_write = (no_bytes & 0xFFFFFFFE) - 2;
ptr = buf + 2;

WREN();

Auto_Add_IncA(Dst, buf[0], buf[1]);

while(bytes_to_write)
{
Wait_Busy_AAI();
Auto_Add_IncB(ptr[0], ptr[1]);

ptr += 2;
bytes_to_write -= 2;
}

Wait_Busy_AAI();

WRDI();
}

void Auto_Add_IncA(unsigned long Dst, unsigned char byte1, unsigned char byte2)
{
CE_Low(); /* enable device */
Send_Byte(0xAD); /* send AAI command */
SendAddress(Dst);

Send_Byte(byte1); /* send 1st byte to be programmed */
Send_Byte(byte2); /* send 2nd byte to be programmed */
CE_High(); /* disable device */
}

void Auto_Add_IncB(unsigned char byte1, unsigned char byte2)
{
CE_Low(); /* enable device */
Send_Byte(0xAD); /* send AAI command */
Send_Byte(byte1); /* send 1st byte to be programmed */
Send_Byte(byte2); /* send 2nd byte to be programmed */
CE_High(); /* disable device */
}

void Wait_Busy_AAI()
{
while ((SST25VF32_Read_Status_Register() & 0x43) == 0x43); /* waste time until not busy */
}


unsigned char SST25VF32_Read_Status_Register()
{
unsigned char byte = 0;
CE_Low(); /* enable device */
Send_Byte(0x05); /* send RDSR command */
byte = Get_Byte(); /* receive byte */
CE_High(); /* disable device */
return byte;
}

inline void WREN()
{
CE_Low(); /* enable device */
Send_Byte(0x06); /* send WREN command */
CE_High(); /* disable device */
}


void WRDI()
{
CE_Low(); /* enable device */
Send_Byte(0x04); /* send WRDI command */
CE_High(); /* disable device */
}

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 11:27:29
Denis-d20
ну в sst25vf немного по другому запись идет на сколько я понял пишется или один бит или команда auto address increment а в моей пишется сразу страничка в 256 байт

Re: Память M25PE40 помогите разобратся

Добавлено: Ср май 04, 2011 14:51:06
Denis-d20
спасибо разобрался принимал неправильно с spi проблема была