MSP430_User 0 November 29, 2016 Posted November 29, 2016 · Report post Здравствуйте! Пытаюсь осуществить запись и считывание одного байта из внешней памяти 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--; } Quote Share this post Link to post Share on other sites More sharing options...
GenaSPB 18 November 30, 2016 Posted November 30, 2016 · Report post Не дожидаетесь почему-то окончания передачи по SPI перед снятием сигнала разрешения. Предлагаю тем же способом, как между байтами. Quote Share this post Link to post Share on other sites More sharing options...
k155la3 27 November 30, 2016 Posted November 30, 2016 · Report post Фазы-полярности SPI соотв-ют спецификации для 93C46 ? Осцилографом проверяли, что там все "так" ? Quote Share this post Link to post Share on other sites More sharing options...
Obam 46 November 30, 2016 Posted November 30, 2016 · Report post Память эта, если не ошибаюсь, 16-разрядная. Не? Quote Share this post Link to post Share on other sites More sharing options...