Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: at45db
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
alexei_u
Добрый вечер!
at45db не хочет отзываться.
Посылаю через usci-spi запрос на стату занятости и проверки ай-ди,в ответ нули.
Подключил анализатор логики,вот скриншот:
каналы: 0-clk,1-miso,2-mosi,3-CS
Вот скриншот из даташита:

выглядит один-в-один.
По подключению: 5 и 6 нога припаяны,на них 3.5В.через 1к 3.5В на ресет.На 7й ГНД,на 1й-МоСи,2аф-КЛК,8ая-МИСО.
В чем может быть дело?
rezident
Цитата(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) в размер экрана не влазит.
alexei_u
Цитата(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,попробую поменять завтра.
На счёт картинок,это верно. Не подумал даже,что так может случиться-первый пост тут с картинкам,в следующй раз обязательно нажму на "ресайз"
rezident
Цитата(alexei_u @ Dec 2 2013, 20:20) *
У меня стоял мод0,попробую поменять завтра.

Приведите текст вашей функции инициализации модуля. Модуль USCI именно с AT45DBxx я не "скрещивал" (хотя был вполне успешный опыт работы модуля USART с AT45DB081), но M25PE16 (SPI Serial Flash от Micron) работает с модулем USCI в MSP430F5438A без каких-либо проблем. Использую режим SPI MODE 3.
alexei_u
Цитата(rezident @ Dec 2 2013, 22:08) *
Приведите текст вашей функции инициализации модуля. Модуль USCI именно с AT45DBxx я не "скрещивал" (хотя был вполне успешный опыт работы модуля USART с AT45DB081), но M25PE16 (SPI Serial Flash от Micron) работает с модулем USCI в MSP430F5438A без каких-либо проблем. Использую режим SPI MODE 3.

Добрый вечер!
Заработала-стала отзываться. Надо было UСCKPL=1(Полярность) выставить.
Всем большое спасибо!
alexei_u
Что-то дело у меня не далек ушло...
Пытаюсь записать в буфер 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);
}

Ставлю брейкпоинт и смотрю,что у меня получается от флешки. Данные не свпадаютsad.gif
ПДФ с даташитом: http://www.atmel.com/images/doc3443.pdf там для чтения тличаются ОП-кды для SPI mode 3 и 0.
alexei_u
Поразительная вещь:флешка отвечает,но в РХ буффер SPI но не попадает или попадает неверно.
Вот срин с анализатора:

Рамер по-меньше поставил-учусьsm.gif
На самом деле на ноуте нету фотшопа,чтобы ресайз по-человечески сделать.
http://i.imgur.com/h9vIxmK.jpg ссылка на полноразмерный скриншот
rezident
Цитата(alexei_u @ Dec 5 2013, 21:04) *
Ставлю брейкпоинт и смотрю,что у меня получается от флешки. Данные не свпадаютsad.gif

Коды команд и режим работы SPI сопоставьте так, как оно должно быть.
Цитата(alexei_u @ Dec 5 2013, 21:04) *
ПДФ с даташитом: http://www.atmel.com/images/doc3443.pdf там для чтения тличаются ОП-кды для SPI mode 3 и 0.

Вообще-то Atmel продала производство Dataflash фирме Adesto Technology. Так что datasheet теперь нужно смотреть там => http://www.adestotech.com/products/dataflash
Цитата(alexei_u @ Dec 5 2013, 23:46) *
Поразительная вещь:флешка отвечает,но в РХ буффер SPI но не попадает или попадает неверно.

Нет масштаба на скриншоте. Уменьшите частоту тактирования SPI. Либо немного растяните CS во времени. Возможно у вас длительность CS High Time слишком маленькая.
Цитата(alexei_u @ Dec 5 2013, 23:46) *
Вот срин с анализатора:

Так и не понятно. Вы MODE 0 используете или все-таки MODE 3 решили применить? Если второе, то зачем в начале CS в нуле (активное состояние, кстати) так долго держите? И при переходе CS 0->1 на CLK тоже ноль. Т.е. dataflash в MODE 0 должна перейти при этом.
Цитата(alexei_u @ Dec 5 2013, 23:46) *
Рамер по-меньше поставил-учусьsm.gif

Малоразборчиво. В JPG можно только фотки блондинок размещать sm.gif Времянки лучше в GIF или в PNG сохранять.
Цитата(alexei_u @ Dec 5 2013, 23:46) *
На самом деле на ноуте нету фотшопа,чтобы ресайз по-человечески сделать.

Бесплатную XnView установите. Эта программа не только просмотрщик всяких картинок. Она в т.ч. позволяет и корректировать изображения. А также экспортировать их в разные другие форматы.
alexei_u
Большое спасибо за развернутый ответ. Скачал даташит. Переделал скрины.
CS в низком состоянии на самом деле не находится,просто так работает авто-старт в программе анализатора.Переделал автостарт по другому каналу и разбил скрины на два:

Команда на запись в буфер1 в ячейку с адресом 0x00 и запись в него 0xAC


Команда на чтение и плучение из буфера1 из ячейки 0x00 одного байта:


То есть в анализаторе видно,что флешка твечает и возвращает нужный байт,как и предплагается,тлько я его не обнаруживаю в буфере SPI. Сейчас посижу,посмтрю,может,где-то не то время жду.

В регистр контроля SPI записываю:
UCB0CTL0 = UCMST+UCMSB+UCSYNC+UCCKPL+UCCKPH; то есть,мод3,если правильно понимаю. OP-коды,по крайней мере,шлю для установки SPI в мод3.

UPD: Всё стало ок-убрал из строчки UCCKPH.
надо ещё раз разобраться с различными режимами работы SPI. У TI фаза пртивоположна общепринятой?!
rezident
Цитата(alexei_u @ Dec 6 2013, 03:48) *
То есть в анализаторе видно,что флешка твечает и возвращает нужный байт,как и предплагается,тлько я его не обнаруживаю в буфере SPI. Сейчас посижу,посмтрю,может,где-то не то время жду.

Еще раз предлагаю на время отладки уменьшить частоту тактирования SPI. Также вызывает сомнение, что вы выдерживаете необходимые паузы CS Setup Time, CS Hold Time, CS High Time.
Второй момент. Похоже вы просто пропускаете при чтении требуемые байты. Поскольку передача и прием в SPI идет одновременно, то разумнее было бы читать буфер приемника после передачи каждого байта и складывать эти байты в буфер. Ненужные байты можно игнорировать уже потом, при разборе содержимого буфера. А так, как реализовано сейчас ваша функция чтения f_buf_read не является универсальной. Например, при чтении статуса (opcode=D7h) вслед за opcode вовсе не нужно передавать целых четыре dummy байта. Статус будет прочитан при передаче первого же dummy. Аналогично для команд чтения Manufacturer and Device ID и управления энергосбережением Deep Power-down. См. табличку в datasheet.
Цитата(alexei_u @ Dec 6 2013, 03:48) *
В регистр контроля SPI записываю:
UCB0CTL0 = UCMST+UCMSB+UCSYNC+UCCKPL+UCCKPH; то есть,мод3,если правильно понимаю. OP-коды,по крайней мере,шлю для установки SPI в мод3.

UPD: Всё стало ок-убрал из строчки UCCKPH.

Да, так стало правильно - SPI MODE 3.
Цитата(alexei_u @ Dec 6 2013, 03:48) *
надо ещё раз разобраться с различными режимами работы SPI. У TI фаза пртивоположна общепринятой?!

Стандарта для SPI как такового нет. Поэтому и названия управляющих битов у разных производителей отличаются. SPI это синхронный последовательный интерфейс впервые введенный фирмой Motorola. Однако есть и другие последовательные синхронные интерфейсы. Например, Microwire был разработан National Semiconductor.
Если вы не читали по ссылкам, приведенным мной ранее, то поясняю еще раз, что режимы SPI определяются двум параметрами именуемыми - CPOL(arity) и CPHA(se).
CPOL определяет состояние сигнала CLK в неактивном режиме (до и после передачи). При CPOL=0 до и после передачи (при неактивном уровне) CLK находится в состоянии лог.0 . Соответственно при CPOL=1 CLK имеет лог.1. как неактивный уровень. В модуле USCI логика управляющего бита UCCKPL совпадает с этим определением.
CPHA определяет по какому фронту сигнала CLK биты данных будут выдвигаться (устанавливаться) и защелкиваться (считываться). В зависимости от CPOL это может быть нарастающий или спадающий фронт. При CPHA=0 данные защелкиваются по первому фронту и выдвигаются по следующему фронту. При CPHA=1 данные выдвигаются по первому фронту и защелкиваются по следующему фронту. В модуле USCI логика управляющего бита UCCKPH инверсная по отношению к этому описанию CPHA.
В обоих режимах SPI MODE 0 и SPI MODE 3 данные защелкиваются по нарастающему фронту и устанавливаются синхронно со спадающим фронтом сигнала CLK. Отличаются эти режимы последовательностью выборки-установки и соответственно уровнем CLK в неактивном режиме.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.