Перейти к содержанию
    

AVR+Fram

Доброго всем времени суток.

Столкнулся с проблемой при работе с FRAM по SPI (MR45V*), вроде как практически тоже самое что и FM25CL.

 

Пытаюсь считать статус памяти, выдает или 0x00(преимущественно) или 0xFF. Но явно не то, что я ожидаю увидеть.

 

 

void SPIE_init()
{    
    PORTE.DIRCLR = (1<<SPIMISO);
    PORTE.DIRSET = (1<<SPIMOSI) | (1<<SPISCK) | (1<<SPICS);
    PORTE.OUTSET = (1<<SPICS);
    SPIE.CTRL = SPI_ENABLE_bm | SPI_MASTER_bm | SPI_MODE_0_gc | SPI_PRESCALER_DIV4_gc;
}


void FeRAM_out(void)
{    
    // Тут пытаюсь изменить статус памяти
    PORTE.OUTCLR = (1<<SPICS);                                                    // Включаем ChipSelect
    SPIE.DATA = 0x06;                                                            // Устанавливаю бит разрешения записи
    while( !(SPIE_STATUS & SPI_IF_bm) );                                            // Жду когда отправится
    PORTE.OUTSET = (1<<SPICS);                                                    // Выключаем ChipSelect
    
       // Здесь пытаюсь считать статус
    PORTE.OUTCLR = (1<<SPICS);                                                    // Включаем ChipSelect
    SPIE.DATA = 0x05;                                                            // Еще раз Отправка команды на получение статуса
    while( !(SPIE_STATUS & SPI_IF_bm) );                                            // Жду ответа об отправке
    StatusSRWD = SPIE.DATA;                                                        // Получаю ответ
    sendCharE0(StatusSRWD);                                                     // Скидываю ответ по UART для наглядности
    PORTE.OUTSET = (1<<SPICS);                                                    // Выключаем ChipSelect
}

 

#WP и #HOLD подтянуты к питанию.

Вроде бы простая память, но где то накосячил и не могу выцепить ошибку(

MR45V256.pdf

Изменено пользователем Nosaer

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрался до осциллографа, на линии SO у меня нет совершенно никакого ответа.

Плюс линия SCK не тактируется в том промежутке, когда должен идти ответ. Получается он даже не пытается получить ответ.

П.С. микроконтроллер XMEGA256A3AU

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрался до осциллографа, на линии SO у меня нет совершенно никакого ответа.

Плюс линия SCK не тактируется в том промежутке, когда должен идти ответ. Получается он даже не пытается получить ответ.

П.С. микроконтроллер XMEGA256A3AU

Наверно (у других процессоров так), чтобы тактировался ответ надо в выходной буфер положить FF и начать его передавать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Предлагаю изучить вопрос "что такое шина SPI". Вообще SPI, не вдаваясь в детали FRAM и XMega.

Тут-то и выяснится, что операций "чтение" и "запись" по отдельности нет. На каждый байт, записанный в шину мастером, слейв записывает свой байт, и мастер его оттуда читает.

Отсюда вывод - чтобы что-то прочитать с шины, мастер должен туда что-то записать. Обычно записывают ноль или 0xFF.

 

Теперь пишете функцию обмена одним байтом:

unsigned char ProcessSPI (unsigned char data)
{
    // записать data в шину
    // подождать, пока отправится (мне лень изучать документацию XMega, извините)
    // return данные из шины
}

 

и вызываете её:

// установить write enable
ChipSelect (true);
ProcessSPI (0x06);
ChipSelect (false);

// проверить статус
ChipSelect (true);
ProcessSPI (0x05);
status = ProcessSPI (0x00);
ChipSelect (false);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы посылаете команду 05 и одновременно получаете в ответ в вполне справедливое 00 или FF как результат обмена, которое считаете статусом.

Для чтения статуса толкните еще на обмен.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О как оказывается)

Большое спасибо за разъяснение, будем пробовать)

 

jcxz, Я Write Enable отправлял, чтоб изменить определенный бит в статусе, чтобы при чтении статуса у меня было например не 0x00, а 0x02.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...