Jump to content
    

Работа с памятью 93lc46b с помощью MSP430FG4618

Здравствуйте!

Пытаюсь осуществить запись и считывание одного байта из внешней памяти 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--;
}

Share this post


Link to post
Share on other sites

Не дожидаетесь почему-то окончания передачи по SPI перед снятием сигнала разрешения.

Предлагаю тем же способом, как между байтами.

Share this post


Link to post
Share on other sites

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

Осцилографом проверяли, что там все "так" ?

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...