Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR+Fram
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Nosaer
Доброго всем времени суток.
Столкнулся с проблемой при работе с 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 подтянуты к питанию.
Вроде бы простая память, но где то накосячил и не могу выцепить ошибку(
Nosaer
Добрался до осциллографа, на линии SO у меня нет совершенно никакого ответа.
Плюс линия SCK не тактируется в том промежутке, когда должен идти ответ. Получается он даже не пытается получить ответ.
П.С. микроконтроллер XMEGA256A3AU
Lagman
Цитата(Nosaer @ Apr 25 2016, 16:25) *
Добрался до осциллографа, на линии SO у меня нет совершенно никакого ответа.
Плюс линия SCK не тактируется в том промежутке, когда должен идти ответ. Получается он даже не пытается получить ответ.
П.С. микроконтроллер XMEGA256A3AU

Наверно (у других процессоров так), чтобы тактировался ответ надо в выходной буфер положить FF и начать его передавать.
esaulenka
Предлагаю изучить вопрос "что такое шина 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);
aiwa
Вы посылаете команду 05 и одновременно получаете в ответ в вполне справедливое 00 или FF как результат обмена, которое считаете статусом.
Для чтения статуса толкните еще на обмен.


jcxz
Цитата(esaulenka @ Apr 25 2016, 21:48) *
// установить write enable

Для чтения статуса посылать "write enable" не нужно.
Nosaer
О как оказывается)
Большое спасибо за разъяснение, будем пробовать)

jcxz, Я Write Enable отправлял, чтоб изменить определенный бит в статусе, чтобы при чтении статуса у меня было например не 0x00, а 0x02.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.