реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Работа с памятью 93lc46b с помощью MSP430FG4618
MSP430_User
сообщение Nov 29 2016, 15:32
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 29-11-16
Пользователь №: 94 424



Здравствуйте!
Пытаюсь осуществить запись и считывание одного байта из внешней памяти 93lc46b. Для этого на память по интерфейсу SPI посылаются команды "Разрешения Очистки/Записи" (EWEN), "Записи" (WRITE), а затем "Чтения" (READ). Перед передачей команды на устройство посылается стартовый бит. Программа пока не оптимизирована, команды пересылаются по проверке флага UTXIFG1, а не с помощью канала ПДП. Подача сигнала CS на память осуществляется по порту ввода/вывода P1.2. Реакция со стороны устройства отсутствует. Подскажите пожалуйста, что я делаю не так. Может быть дело в задержках при передаче или сами пересылаемые команды имеют неправильный вид?

Datasheet 93lc46b

Код
#include <msp430FG4618.h>

unsigned char rsv = 0xFF;
unsigned char rsv1 = 0xFF;
int i;

int main(void) {
    WDTCTL = WDTPW + WDTHOLD;            // Остановить WDT

    //настройки SPI
    P4SEL |= 0x38;                        // Р4.3, 4, 5 => SPI
    U1CTL = CHAR+SYNC+MM+SWRST;            // 8 бит, SPI, ведущий
    U1TCTL |= CKPL+SSEL0+STC;              // Полярность, ACLK, 3-пров.
    U1BR0 = 0x080 , U1BR1 = 0x00;         // UCLK = ACLK
    U1MCTL = 0x00;                         // Биты модуляции
    ME2 |= USPIE1;                         // Включение SPI модуля
    U1CTL &= ~SWRST;                     // Разрешение SPI

    //настройка ввода/вывода порта P1.2
    P1DIR |= 0x04;

    P1OUT &= ~0x04;
    i = 1000;
    while(i>0) i--;
    P1OUT |= 0x04;

    //разрешение Очистки/Записи
    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0x01;                //00000001

    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0x30;                //00110000

    P1OUT &= ~0x04;
    i = 1000;
    while(i>0) i--;
    P1OUT |= 0x04;

    //Запись
    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0x01;                //00000001

    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0x4A;                //01001010

    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0xFF;                //11001100

    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0xFF;                //11001100

    P1OUT &= ~0x04;
    i = 1000;
    while(i>0) i--;
    P1OUT |= 0x04;

    //Чтение
    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0x01;                //00000001

    while (!(IFG2 & UTXIFG1));
    U1TXBUF = 0x8A;                //10001010

    while (!(IFG2 & URXIFG1));         // Ожидаем готовность буфера приёма
    rsv = U1RXBUF;                    // Прием данных

    U1TXBUF = 0x00;
    while (!(IFG2 & URXIFG1));         // Ожидаем готовность буфера приёма
    rsv1 = U1RXBUF;                    // Прием данных

    P1OUT &= ~0x04;
    i = 1000;
    while(i>0) i--;
}
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 30 2016, 02:46
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 483
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Не дожидаетесь почему-то окончания передачи по SPI перед снятием сигнала разрешения.
Предлагаю тем же способом, как между байтами.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 30 2016, 10:01
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 494
Регистрация: 8-03-09
Из: Днепропетровск
Пользователь №: 45 848



Фазы-полярности SPI соотв-ют спецификации для 93C46 ?
Осцилографом проверяли, что там все "так" ?

Go to the top of the page
 
+Quote Post
Obam
сообщение Nov 30 2016, 14:12
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 548
Регистрация: 14-11-14
Пользователь №: 83 663



Память эта, если не ошибаюсь, 16-разрядная. Не?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th May 2017 - 15:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016