Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программирование Flash Mega128(SPI)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
StasUKR
Приветствую всех

Делаю контроллер перешивающий другой контроллер по 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

}

результат чтения:
Код
:020000020000FC
:100000000110011001100110011001100110011068
:100010000110011001100110011001100110011058
:100020000110011001100110011001100110011048
...
:1000D0000110011001100110011001100110011098
:1000E0000110011001100110011001100110011088
:1000F0000110011001100110011001100110011078
:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
...
:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F
:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
:1002000002200220022002200220022002200220DE
:1002100002200220022002200220022002200220CE
:1002200002200220022002200220022002200220BE
...
:1002D000022002200220022002200220022002200E
:1002E00002200220022002200220022002200220FE
:1002F00002200220022002200220022002200220EE
:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED


Спасибо a14.gif
Палыч
Цитата(StasUKR @ Feb 19 2015, 13:18) *
При записи 2х страниц(длинной 128 слов) по адресам 00000 и 00001 данные пишутся через промежуток в 128 слов.

Привести код записи страницы с адресом 00001 - места на экране не хватило?
StasUKR
Разобрался...
Думал что бит "b" адреса "aaaab" команды записи страницы - это именно старший бит , который перенесен в 3й байт команды, а оказалось, что aaaab - это просто 5-битный адрес.... twak.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.