Делаю контроллер перешивающий другой контроллер по SPI
Связь наладил, инициализацию программирования сделал, читаю ID, стираю флеш, пишу постранично...
НО!
При записи 2х страниц(длинной 128 слов) по адресам 00000 и 00001 данные пишутся через промежуток в 128 слов.
При считывании всей памяти я вижу : 128слов первая страница,128*"FFFF",128 слов вторая страница,128*"FFFF",...)
Что я делаю не так?
Код записи буфера и страницы:
Код
void writeword(uint16_t data,uint8_t numb)//пишем 16-битное слово по адресу на страницу
{
//младший байт
spi_send_byte(0x40);//1
spi_send_byte(0x00);//2
spi_send_byte(numb);//3 - адр слова на странице
spi_send_byte((data&0xFF));//4 - сначала младший байт 16-чного слова
//старший байт
spi_send_byte(0x48);//1
spi_send_byte(0x00);//2
spi_send_byte(numb);//3 - адр слова на странице
spi_send_byte((data>>8));//4 - потом старший байт 16-чного слова
}
void writepage(unsigned short int NumPage)//пишем страницу 128 слов
{
for(unsigned short int i=0;i<128;i++)
{
writeword(0x1001,i);
}
spi_send_byte(0x4C);//1 //команда на запись
spi_send_byte(0x00);//2 к примеру пишу нулевую страницу
spi_send_byte(0x00);//3
spi_send_byte(0x00);//4
}
{
//младший байт
spi_send_byte(0x40);//1
spi_send_byte(0x00);//2
spi_send_byte(numb);//3 - адр слова на странице
spi_send_byte((data&0xFF));//4 - сначала младший байт 16-чного слова
//старший байт
spi_send_byte(0x48);//1
spi_send_byte(0x00);//2
spi_send_byte(numb);//3 - адр слова на странице
spi_send_byte((data>>8));//4 - потом старший байт 16-чного слова
}
void writepage(unsigned short int NumPage)//пишем страницу 128 слов
{
for(unsigned short int i=0;i<128;i++)
{
writeword(0x1001,i);
}
spi_send_byte(0x4C);//1 //команда на запись
spi_send_byte(0x00);//2 к примеру пишу нулевую страницу
spi_send_byte(0x00);//3
spi_send_byte(0x00);//4
}
результат чтения:
Код
:020000020000FC
:100000000110011001100110011001100110011068
:100010000110011001100110011001100110011058
:100020000110011001100110011001100110011048
...
:1000D0000110011001100110011001100110011098
:1000E0000110011001100110011001100110011088
:1000F0000110011001100110011001100110011078
:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
...
:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F
:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
:1002000002200220022002200220022002200220DE
:1002100002200220022002200220022002200220CE
:1002200002200220022002200220022002200220BE
...
:1002D000022002200220022002200220022002200E
:1002E00002200220022002200220022002200220FE
:1002F00002200220022002200220022002200220EE
:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED
:100000000110011001100110011001100110011068
:100010000110011001100110011001100110011058
:100020000110011001100110011001100110011048
...
:1000D0000110011001100110011001100110011098
:1000E0000110011001100110011001100110011088
:1000F0000110011001100110011001100110011078
:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
...
:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F
:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
:1002000002200220022002200220022002200220DE
:1002100002200220022002200220022002200220CE
:1002200002200220022002200220022002200220BE
...
:1002D000022002200220022002200220022002200E
:1002E00002200220022002200220022002200220FE
:1002F00002200220022002200220022002200220EE
:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED
Спасибо
