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

 
 
> f149 UART1(SPI mode)&DataFlash - грабли
O.L.
сообщение Jun 10 2005, 07:28
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 10-06-05
Из: Новосибирск
Пользователь №: 5 890



Пытаюсь отработать процедуры для AT45DB161. UART0 - SerialPort, UART1 SPI 3-wire.

Чтение и запись обоих буферов DataFlash проходит, есть грабельки, но не смертельные.
Прямое чтение страницы MM из DataFlash как и запись MM через оба буфера - вообще без проблем.
Операции стирания страниц, запись содержимого любого из буферов в любую страницу MM, загрузка любой страницы MM в любой буфер - не проходят вообще.
Перебор уровней оптимизации IAR-овского компайлера не влияет, процедуры то простенькие, существенной разницы в ассемблерных листингах нет.
Передрал несколько вариантов инициализации порта, вот так выглядит самый устойчивый.
Код
//    - initialisation spi1 UART module -----------
void spi1_init (void)
{
    U1CTL |= CHAR + SYNC + MM + SWRST;  // 8-bit, SPI, Master
    U1TCTL |= CKPL + SSEL1 + STC;      // Polarity, SMCLK, 3-wire
    U1BR0 = 0x02;          // SPICLK = SMCLK/2 ~ 4MHz
    U1BR1 = 0x00;
    U1MCTL = 0x00;
    ME2 |= USPIE1;          // Module enable
    U1CTL &= ~SWRST;      // Restart USART SPI, SPI enable
//    IE2 |= URXIE1 + UTXIE1;        // RX and TX interrupt enable
}

Опыта работы с DataFlash не так много. Собственно сами процедуры работы перенес с HiTech для pic18-го и DF AT45D011
Вторую неделю бъюсь и здравых мыслей уже нет. Остались только дурацкий колпак и бубен ...
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 18)
//Nikson
сообщение Apr 11 2006, 18:49
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



Поднимаю старую тему.

Есть F149 и две SPI-DataFlash - AT25F2048 и AT45DB161B. Инициализацию SPI (UART1) сделал на основе примеров из этой темы. Никакой связи с памятью наладить не удалось - выяснилось что на выводе контроллера P5.3 нет тактового сигнала UCLK. Вместо него или высокий уровень если установлен бит CKPL, или низкий если бит не установлен (по крайней мере вывод рабочий). Почему так - понять не могу.

Из программы удалил всё, что не касается SPI. Осталось вот что:
Код
int main()
{

  WDTCTL = WDTPW + WDTHOLD;
  IE1   |= OFIE + WDTIE;
  IFG1  |= OFIFG;
  
  __enable_interrupt();
  
  AT25SEL &= ~AT25LN;
  AT25DIR |= AT25LN;
  AT25CS_HI;
  
  AT45SEL &= ~AT45LN;
  AT45DIR |=  AT45LN;
  AT45CS_HI;
  
   IE2 &= ~(UTXIE1 + URXIE1);
   U1CTL = SWRST;
   U1CTL |= CHAR + SYNC + MM;
   U1TCTL = CKPL + SSEL1 + STC;
   U1BR1  = 0x00;
   U1BR0  = 0x04;
   U1MCTL = 0x00;
   ME2 |= USPIE1;
   U1CTL &= ~SWRST;
   //IE2 |= UTXIE1 + URXIE1;

   P5SEL |= 0x0E;
   P5DIR |= 0x0A;

   P1DIR = 0x10; //проверка наличия SMCLK
   P1SEL = 0x10;  


  while(1)
  {

  }

  return 0;
}

и тактирование (кварц 7,32 МГц и 32КГц)
Код
#pragma vector = NMI_VECTOR
__interrupt void OSCfault_ISR(void)
{
BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;
BCSCTL1 = DIVA_0 + RSEL2 + RSEL1 + RSEL0;
DCOCTL = DCO1 + DCO2;
while ((IFG1 & OFIFG) != 0) IFG1 &=~OFIFG;
BCSCTL2 = SELM_2 + DIVM_0 + DIVS_0 + SELS;
}


На ноге 16 SMCLK есть. Пробовал разные варианты U1BR1 и U1BR0, пробовал тактирование от ACLK - результат тот же.

Конфигурация выводов после выполнения программы:
P5SEL=0b00001110
P5DIR=0b00011011
P5OUT=0b00010001
(т.е. вывод 5.3 - периферийный модуль, на вывод, обе памяти в состоянии сброса)

вроде бы всё правильно.... и не работает. нужен свежий взгляд.

Подскажите в каком направлении копать, пожалуйста. (может ли дело быть в схемотехнике? может, какая обвязка нужна - у меня всё соединено напрямую).
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 11 2006, 19:52
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



//Nikson, два момента.
1. Вы бы не поленились еще хидер с дефайнами к исходнику приложить. А то как можно найти чужую ошибку, когда такой блок видишь?
Цитата
AT25SEL &= ~AT25LN;
AT25DIR |= AT25LN;
AT25CS_HI;

AT45SEL &= ~AT45LN;
AT45DIR |= AT45LN;
AT45CS_HI;

2. SPI это синхронный интерфейс для обмена данными. Чтобы что-то принять, нужно что-то передать. Где у вас в исходнике команда записи в UxTXBUF? Или вы предполагаете, что UCLK для SPI сам по себе постоянно генерится?
В общем RTFM.

P.S. ИМХО не совсем хорошо залезать в чужую тему со своими проблемами. Заведите свою собственную. Так более корректно будет.
Go to the top of the page
 
+Quote Post
//Nikson
сообщение Apr 11 2006, 21:12
Сообщение #18


Участник
*

Группа: Свой
Сообщений: 43
Регистрация: 26-01-06
Из: Минск, Беларусь
Пользователь №: 13 651



rezident,
Да, точно. Эти 2 куска управляют только сигналами ChipSelect для двух микросхем памяти. На SPI влияния не оказывают, поэтому из поля зрения упустил.

Что касается UCLK и U1TXBUF... У меня-то именно передача и не работала. Поиск неисправности в первую очередь начал с проверки тактового сигнала. Обнаружилось, что его нет - вот я и бросился активно его искать, максимально урезав код, убрал всё что хоть как-то могло повлиять (в том числе и запись данных в буфер передатчика)- до этого момента был уверен, что он должен генерироваться постоянно пока включён модуль, независимо от состояния приёма/передачи в данный момент. Ну не знаю, почему я это так придумал sad.gif ....К сожалению, теперь выходит что не UCLK дело и надо рыть глубже. По крайней мере не буду топтаться на одном месте. Спасибо.

ЗЫ. Хорошо, замечание по поводу тем принято. Приношу свои извинения.
Просто иногда на форумах проповедуется идеология "все схожие вопросы в одной теме". Сделано для того, чтобы человек при решении проблемы поиском наткнулся на одну тему, прочитал её от начала до конца и разобрался. А не рылся в залежах тем-близнецов. ИМХО какая-то логика в этом есть, но в чужой монастырь со своим уставом не ходят smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 11 2006, 21:43
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(//Nikson @ Apr 12 2006, 03:12) *
ИМХО какая-то логика в этом есть, но в чужой монастырь со своим уставом не ходят smile.gif [/i]

Я не указывал вам, а лишь высказал свое мнение. Не я местный "устав" составлял, но я ему подчиняюсь. "Бурундук - птичка" что тут поделаешь? smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 08:19
Рейтинг@Mail.ru


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