Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
25.11.2007, 21:55
|
|
Прохожий
Регистрация: 27.05.2006
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
не записывается в в буфер 1 at45db081 и at89c51ed2
вечер добрый.
Что то не хочет работать data flash at45db081, Чтение статуса происходит нормально . нога RDY/BSY в hight. а при чтение буфера вроде происходит не знай насколько правиль по одному адресу 125 по другому 187. сделал две тестовые функции одна записывает другая читает буф1.
Код:
|
unsigned char READ_BUF_1(int adres)
{
unsigned char S;unsigned char M;
if(adres ›= 263){adres = 263;} if(adres ‹= 0){adres = 0;} // контроль правильного ввода адреса
//
if(0x100 & adres){S = 1;}else {S = 0;}
//
if(0x80 & adres){M |= 0x80;}
if(0x40 & adres){M |= 0x40;}
if(0x20 & adres){M |= 0x20;}
if(0x10 & adres){M |= 0x10;}
if(0x08 & adres){M |= 0x08;}
if(0x04 & adres){M |= 0x04;}
if(0x02 & adres){M |= 0x02;}
if(0x01 & adres){M |= 0x01;}
//
WAIT_REDY(); // проверка ноги REDY/BESY
CS(0) //выбор кристал
SPSTA = 0x00; //сброс регистра состояния
SPDAT = 0xD4; // передача команды по SPI
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = 0x00; // передача 0
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = S; // передача адрес S по SPI
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = M; // передача адрес M по SPI
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = 0x00; // передача Х
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = 0x00; // чтение данных
RX_TX_END(); // ожидание завершения передачи
CS(1) // CS1
return SPDAT;
}//end read buf1
//--------------------------------------------------------------------------------------------------
void WRITE_BUF_1(int adres, unsigned char dat)
{
unsigned char S;unsigned char M;
if(adres ›= 263){adres = 263;} if(adres ‹= 0){adres = 0;} // контроль правильного ввода адреса
//
if(0x100 & adres){S = 1;}else {S = 0;}
//
if(0x80 & adres){M |= 0x80;}
if(0x40 & adres){M |= 0x40;}
if(0x20 & adres){M |= 0x20;}
if(0x10 & adres){M |= 0x10;}
if(0x08 & adres){M |= 0x08;}
if(0x04 & adres){M |= 0x04;}
if(0x02 & adres){M |= 0x02;}
if(0x01 & adres){M |= 0x01;}
//
WAIT_REDY(); // проверка ноги REDY/BESY
CS(0) //выбор кристал
SPSTA = 0x00; //сброс регистра состояния
SPDAT = 0x84; // передача команды по SPI
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = 0x00; // передача x
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = S; // передача адрес S по SPI
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = M; // передача адрес M по SPI
RX_TX_END(); // ожидание завершения передачи
SPSTA = 0x00; //сброс регистра состояния
SPDAT = dat; // запись данных в буфер 1
RX_TX_END(); // ожидание завершения передачи
CS(1) // CS1
}//end write buf 1
//--------------------------------------------------------------------------------------------------
вызываю
void main()
{
unsigned char var;
//иниц SPI, flash
WRITE_BUF_1(25 , 11); //запись
var = READ_BUF_1(25); // чтение
индикация (var); читается 216, вроде бы должен читаться как 11.
}
spi настроен SPCON = 0x73; |
|
|
|
|
26.11.2007, 03:01
|
|
Прописка
Регистрация: 20.12.2005
Сообщений: 117
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: не записывается в в буфер 1 at45db081 и at89c51ed2
В датафлеше запись и чтение насколько помнится идут по разным фронтам. Пишите софтовый драйвер SPI.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:45.
|
|