Перейти к содержанию
    

Работа с внешней памятью

К сожалению сейчас некогда рассматривать Ваш код. Может попозже... И посмотрите, как включать код в сообщение, а то читать в таком виде затруднительно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот переделал, вставил, чтобы читать было удобнее

 

void WriteFM25L256(unsigned int adress, char *mass, int nbyte)
{
unsigned int a;

// OFF_HOLD_FRAM(); //продолжить передачу данных из FRAM
// OFF_WP_FRAM(); //отключить защиту записи
CS_FRAM(); //чип-селект для FRAM

while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = WREN_FM25L; //разрешение записи в FM25L256
while(!(U0TCTL & TXEPT));
// __no_operation();
// __no_operation();
// __no_operation();
// __no_operation();
OFF_CS_FRAM(); //сброс чипселекта FRAM
CS_FRAM(); //чип-селект для FRAM
while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = WRITE_FM25L; //разрешение записи в FM25L256
while(!(U0TCTL & TXEPT));
while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = adress >> 8; //запись старшего байта адреса
while(!(U0TCTL & TXEPT));
while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = adress; //запись младшего байта адреса
while(!(U0TCTL & TXEPT));
for(a = 0; a < nbyte; a++)
{
// while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера
// U0TXBUF = mass[a] >> 8; //передать старший байт элемента массива
while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера
U0TXBUF = mass[a]; //передать младший байт элемента массива
while(!(U0TCTL & TXEPT));
};
// while(!(U0TCTL & TXEPT)); //пусты ли регистры TX
// WP_FRAM(); //включить защиту записи
OFF_CS_FRAM(); //сброс чипселекта FRAM
}

void ReadFM25L256(unsigned int adress, char *mass, int nbyte)
{
unsigned int a;
CS_FRAM(); //чип-селект для FRAM

while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = READ_FM25L; //команда //разрешение чтения из FM25L256
while(!(U0TCTL & TXEPT));
while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера
U0TXBUF = adress >> 8; //запись старшего байта адреса
while(!(U0TCTL & TXEPT));
while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера
U0TXBUF = adress; //запись младшего байта адреса
while(!(U0TCTL & TXEPT));
for(a = 0; a < nbyte; a++)
{
while (!(IFG1 & UTXIFG0)); //ожидание готовности TX-буфера
U0TXBUF = 0x40; //тактирование FRAM
while(!(U0TCTL & TXEPT));
while (!(IFG1 & URXIFG0)); //ожидание готовности RХ-буфера
mass[a] = U0RXBUF; //считывание из RX-буфера в массив страшего байта
while(!(U0TCTL & TXEPT));
}
//while(!(U0TCTL & TXEPT)); //пусты ли регистры TX
OFF_CS_FRAM(); //сброс чипселекта FRAM
}/* конец определения ------------------------------------------------------------------*/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если с пинами (W и HOLD) все в порядке, то замечание только одно:

void WriteFM25L256(unsigned int adress, char *mass, int nbyte)
{
unsigned int a;

CS_FRAM(); //чип-селект для FRAM
while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = WREN_FM25L; //разрешение записи в FM25L256
while(!(U0TCTL & TXEPT));
// __no_operation();
// __no_operation();
// __no_operation();
// __no_operation();
OFF_CS_FRAM(); //сброс чипселекта FRAM
	// ------- необходим таймаут хотя-бы на один такт SPI ------------
CS_FRAM(); //чип-селект для FRAM
while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = WRITE_FM25L; //разрешение записи в FM25L256
while(!(U0TCTL & TXEPT));
while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = adress >> 8; //запись старшего байта адреса
while(!(U0TCTL & TXEPT));
while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера
U0TXBUF = adress; //запись младшего байта адреса
while(!(U0TCTL & TXEPT));
for(a = 0; a < nbyte; a++)
{
	while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера
	U0TXBUF = mass[a]; //передать младший байт элемента массива
	while(!(U0TCTL & TXEPT));
};
OFF_CS_FRAM(); //сброс чипселекта FRAM
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз прошу прощения, но что значит WP и HOLD в порядке? Они должны быть установлены в каком то положении??? Они у меня подняты в единицу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз прошу прощения, но что значит WP и HOLD в порядке? Они должны быть установлены в каком то положении??? Они у меня подняты в единицу.

 

Это нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем не работает. Слать в микруху я данные шлю - это я вижу на осциллографе, а читать ничего не читаю. Скажите, пожалуйста, как должны быть установлены WP и HOLD. Вообще, если смотреть в мануал, то получается, что WP - это аппаратная защита от записи. Или я ошибаюсь? Про HOLD тоже вроде понятно, что если ноль, то все будет игнорироваться. А можно еще подсказать настройки SPI? Я вот так настраиваю:

  switch(UsartNumber)
  {
    case 0:
      U0CTL |=  SWRST;
      U0CTL |= MM + SYNC + CHAR;             //Master, SPI, 8-bit Data;
      U0TCTL |= STC + SSEL0 + SSEL1;
      U0BR0 = 0x02;                          
      U0BR1 = 0x00;
      U0MCTL = 0x00;                        
      ME1 |= USPIE0;                         
      U0CTL &= ~SWRST;                  
      break;
    case 1:
      U1CTL |= SWRST;
      U1CTL |= SYNC + CHAR;     //Slave, SPI, 8-bit Data;
      U1TCTL |= STC + CKPH;     
      U1BR0 = 0x02;            
      U1BR1 = 0x00;
      U1MCTL = 0x00;           
      ME2 |= USPIE1;            
      U1CTL &= ~SWRST;     
      break;
    default:
      break;
  }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что WP - это аппаратная защита от записи.

Да правильно. Для МС которую вы пользуете - в нормальном режиме работы (чтение/запись) WP и HOLD должны быть подтянуты к VCC.

 

По поводу настройки SPI - проконсультируйтесь в тематическом форуме по MSP.

Если есть сомнения в настройках железа - можно попробовать программно эмулировать SPI - ногодрыганием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...