|
at45db, не отзывается |
|
|
|
Dec 1 2013, 14:40
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 10-07-13
Пользователь №: 77 466

|
Добрый вечер! at45db не хочет отзываться. Посылаю через usci-spi запрос на стату занятости и проверки ай-ди,в ответ нули. Подключил анализатор логики,вот скриншот:  каналы: 0-clk,1-miso,2-mosi,3-CS Вот скриншот из даташита:  выглядит один-в-один. По подключению: 5 и 6 нога припаяны,на них 3.5В.через 1к 3.5В на ресет.На 7й ГНД,на 1й-МоСи,2аф-КЛК,8ая-МИСО. В чем может быть дело?
|
|
|
|
|
 |
Ответов
|
Dec 1 2013, 21:14
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(alexei_u @ Dec 1 2013, 19:40)  В чем может быть дело? Если я правильно рассмотрел и понял времянки, то у вас используется SPI MODE 1 или 2 Ссылка 1, ссылка 2, ссылка 3. В то время как Dataflash поддерживает только SPI MODE 0 и SPI MODE 3. Плюс к этому см. в datasheet раздел Цитата 16. Power-On/Reset State When power is first applied to the device, or when recovering from a reset condition, the device will default to SPI Mode 3. In addition, the output pin (SO) will be in a high impedance state, and a high-to-low transition on the CS pin will be required to start a valid instruction. The SPI mode (Mode 3 or Mode 0) will be automatically selected on every falling edge of CS by sampling the inactive clock state. Лично я всегда стараюсь использовать SPI MODE 3 как более-менее "универсальный". Может и вам это поможет? P.S. не стоит такие скрины постить. Будьте скормнее. Картинка распирает страницу так, что она даже на мониторе с разрешением FullHD (1920x1080) в размер экрана не влазит.
|
|
|
|
|
Dec 2 2013, 15:20
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 10-07-13
Пользователь №: 77 466

|
Цитата(rezident @ Dec 2 2013, 01:14)  Если я правильно рассмотрел и понял времянки, то у вас используется SPI MODE 1 или 2 Ссылка 1, ссылка 2, ссылка 3. В то время как Dataflash поддерживает только SPI MODE 0 и SPI MODE 3. Плюс к этому см. в datasheet раздел Лично я всегда стараюсь использовать SPI MODE 3 как более-менее "универсальный". Может и вам это поможет? P.S. не стоит такие скрины постить. Будьте скормнее. Картинка распирает страницу так, что она даже на мониторе с разрешением FullHD (1920x1080) в размер экрана не влазит. Спасибо за ответ! К сожалению,сегодня боролся с ЕМСом,проверю завтра. У меня стоял мод0,попробую поменять завтра. На счёт картинок,это верно. Не подумал даже,что так может случиться-первый пост тут с картинкам,в следующй раз обязательно нажму на "ресайз"
|
|
|
|
|
Dec 4 2013, 22:00
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 10-07-13
Пользователь №: 77 466

|
Цитата(rezident @ Dec 2 2013, 22:08)  Приведите текст вашей функции инициализации модуля. Модуль USCI именно с AT45DBxx я не "скрещивал" (хотя был вполне успешный опыт работы модуля USART с AT45DB081), но M25PE16 ( SPI Serial Flash от Micron) работает с модулем USCI в MSP430F5438A без каких-либо проблем. Использую режим SPI MODE 3. Добрый вечер! Заработала-стала отзываться. Надо было UСCKPL=1(Полярность) выставить. Всем большое спасибо!
|
|
|
|
|
Dec 5 2013, 16:04
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 10-07-13
Пользователь №: 77 466

|
Что-то дело у меня не далек ушло... Пытаюсь записать в буфер 1 информацию, а потом её же плучить. Код: CODE /* * main.c */ #include "msp430.h" #include "stdint.h"
#define SPIRXBUF UCB0RXBUF #define SPI_SEND(x) UCB0TXBUF=x #define SPITXREADY (IFG2&UCB0TXIFG) /* Wait for TX to be ready */ #define SPITXDONE (UCB0STAT&UCBUSY) /* Wait for TX to finish */ #define SPIRXREADY (IFG2&UCB0RXIFG) /* Wait for TX to be ready */ #define SPIRXFG_CLR IFG2 &= ~UCB0RXIFG #define dummy 0xff #define f_on P1OUT&=~BIT4 #define f_off P1OUT|=BIT4
int data1; char data;
void f_buf_write(int buf_nb,char data,int adress) { f_on; switch(buf_nb) {case 1: SPI_SEND(0x84); break; case 2: SPI_SEND(0x87); break; } while (!SPITXREADY); SPI_SEND(dummy); while (!SPITXREADY); SPI_SEND(adress>>8); while (!SPITXREADY); SPI_SEND(adress); while (!SPITXREADY); SPI_SEND(data); while(SPITXDONE); f_off; }
int f_buf_read(int buf_nb,char data,int adress) { f_on; switch(buf_nb) {case 1: SPI_SEND(0xD4); break; case 2: SPI_SEND(0x56); break; } while(!SPITXREADY); SPI_SEND(dummy); while(!SPITXREADY); SPI_SEND(adress>>8); while(!SPITXREADY); SPI_SEND(adress); while(!SPITXREADY); SPI_SEND(dummy); while(!SPITXREADY); SPI_SEND(dummy);//transition starts here while(!SPIRXREADY); data=SPIRXBUF;// Breakpoint toggled here data1=(int)data; f_off; return data1; }
void main(void) { P2SEL=0; P2SEL2=0; P2DIR&=~BIT0; P2OUT&=~BIT0; P1DIR|=BIT4|BIT0; P1OUT|=BIT4; // CS f_off P1SEL|=BIT5|BIT6|BIT7; P1SEL2|=BIT5|BIT6|BIT7; UCB0CTL0 = UCMST+UCMSB+UCSYNC+UCCKPL+UCCKPH; // 3-pin, 8-bit SPI master; mode 3 spi UCB0CTL1 = UCSSEL_2+UCSWRST; // UCB0BR0 |= 0x0F; // UCB0BR1 = 0; UCB0CTL1 &= ~UCSWRST; //start SPI SPI_SEND(0X01); f_buf_write(1,0xa5,0); data1=f_buf_read(1,data,0); }
Ставлю брейкпоинт и смотрю,что у меня получается от флешки. Данные не свпадают  ПДФ с даташитом: http://www.atmel.com/images/doc3443.pdf там для чтения тличаются ОП-кды для SPI mode 3 и 0.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|