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

 
 
> замена AT45DB161B-RI на AT45DB161D-SU, проблема с отсутствием ноги RDY/~BUSY
plombir
сообщение Nov 17 2006, 12:33
Сообщение #1


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

Группа: Участник
Сообщений: 99
Регистрация: 14-12-05
Пользователь №: 12 191



Доброго дня, Господа!

Так как м/с flash AT45DB161B-RI (28 ног) снята с производства, решено заменить её на 8-и ножечную. Так, вот, проблема возникла при написании кода определения занятости м/с. Если раньше сигнал проверялся на ноге RDY/~BUSY и проблем не было, то здесь она отсутствует и приходится проверять через "Регистр Статуса" 7-ой бит. Что то не получается... Перепробовал по разному и по всякому. Начинает работать если ставится задержка из цикла NOP-ов вместо ожидания.

Если кто сталкивался с программным опросом м/с flash AT45 через регистр, подскажите пожалуйста последовательность действий при ожидании занятости.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Ykidia
сообщение Mar 30 2007, 10:17
Сообщение #2


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

Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287



Вот они:

Код
#define SPI_MODE                0x38    // MSTR CPOL CPHA = 111
#define SPI_RATE                0x08

// SPI Initialization
void SPI_Init( void )
{
    S0SPSR;
    S0SPINT         = 0x01;
    S0SPCCR         = SPI_RATE;
    S0SPCR          = SPI_MODE;
    S0SPDR;
    S0SPSR;
}

// SPI Read byte
unsigned char SPI_ReadByte( void )
{
    unsigned char bTmp;

    S0SPSR;
    S0SPCCR         = SPI_RATE;
    S0SPCR          = SPI_MODE;
    S0SPDR          = 0;
    do {
        bTmp = S0SPSR;
        if( (bTmp & 0x10) != 0 )
            // if MODF = 1
            S0SPCR = SPI_MODE;
        if( (bTmp & 0x40) != 0 )
            // if WCOL = 1
            S0SPDR;
    } while( (bTmp & 0x80) == 0 );

    return( S0SPDR );
}

// SPI Write byte
void SPI_WriteByte( unsigned char bData )
{
    unsigned char bTmp;

    S0SPSR;
    S0SPCCR         = SPI_RATE;
    S0SPCR          = SPI_MODE;
    S0SPDR          = bData;
    do {
        bTmp = S0SPSR;
        if( (bTmp & 0x10) != 0 )
            // if MODF = 1
            S0SPCR = SPI_MODE;
        if( (bTmp & 0x40) != 0 )
            // if WCOL = 1
            S0SPDR;
    } while( (bTmp & 0x80) == 0 );
}


Раньше на чтение/запись по SPI была одна функция, но когда начались непонятные пляски, пришлось разделить на всякий случай.

Сообщение отредактировал Ykidia - Mar 30 2007, 10:24
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 30 2007, 12:53
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Ykidia @ Mar 30 2007, 09:17) *
Вот они:
Ха! Батенька!
#define SPI_MODE 0x38
Цитата
6 LSBF LSB First controls which direction each byte is shifted when transferred. When 1, SPI data is transferred LSB (bit 0) first. When 0, SPI data is transferred MSB (bit 7) first.
Вы же данные не тем концом суете.
Цитата
All instructions, addresses, and data are transferred with the most significant bit (MSB) first.

Код
{
    __spcr_bits Tmp;
    Tmp.CPHA = 1;
    Tmp.CPOL = 1;
    Tmp.MSTR = 1;
    Tmp.LSBF = 0;
    Tmp.SPIE = 0;
    S0SPCR_bit = Tmp;
}
В остальном не вижу криминала. Единственное, у меня IAR строчки вида S0SPSR; просто выкидывает. Хотя это явная ошибка, по стандарту должно быть чтение. Поэтому я делаю { volatile uint8_t tmp = S0SPSR; }. Не смотрели листинг, может то же самое?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- plombir   замена AT45DB161B-RI на AT45DB161D-SU   Nov 17 2006, 12:33
- - prottoss   Цитата(plombir @ Nov 17 2006, 19:33) Добр...   Nov 17 2006, 12:41
- - VDG   Цитата(plombir @ Nov 17 2006, 15:33) Если...   Nov 17 2006, 12:42
- - prottoss   Раз уж создана тема про ДатаФлэш, хотелось бы спро...   Nov 17 2006, 15:14
|- - zltigo   Цитата(prottoss @ Nov 17 2006, 17:14) Раз...   Nov 17 2006, 19:36
|- - rezident   Цитата(prottoss @ Nov 17 2006, 20:14) Раз...   Nov 17 2006, 20:23
|- - prottoss   Цитата(rezident @ Nov 18 2006, 03:23) На ...   Nov 18 2006, 16:17
- - vesago   Я из экономии ног и 28 ноговую db161 опрашивал чер...   Nov 17 2006, 19:29
- - Ykidia   ЦитатаНичего сложного там нет. Читаете даташит и с...   Mar 28 2007, 12:41
|- - Сергей Борщ   Цитата(Ykidia @ Mar 28 2007, 11:41) Так ч...   Mar 28 2007, 13:05
- - Ykidia   Спасибо за ответ. У меня примерно такой же код (со...   Mar 28 2007, 13:25
|- - Сергей Борщ   Цитата(Ykidia @ Mar 28 2007, 12:25) однак...   Mar 28 2007, 13:47
- - add   Работал с AT45DB041 в soic8 корпусе. Там нет ножк...   Mar 28 2007, 13:35
- - Ykidia   Да, фиктивную передачу делаю, иначе просто бит око...   Mar 28 2007, 14:38
|- - Сергей Борщ   Цитата(Ykidia @ Mar 28 2007, 13:38) Да, ф...   Mar 29 2007, 13:46
- - Itch   Насколько я понял из даташита, читать весь статусн...   Mar 28 2007, 21:42
- - Artem_Petrik   Цитатаdo { DF_ChipSelect_Start(); ...   Mar 28 2007, 22:30
- - sensor_ua   ЦитатаЕдинственное, у меня IAR строчки вида S0SPSR...   Mar 31 2007, 10:00
|- - Сергей Борщ   Цитата(sensor_ua @ Mar 31 2007, 09:00) Вс...   Mar 31 2007, 13:24
|- - zltigo   Цитата(Сергей Борщ @ Mar 31 2007, 12:24) ...   Mar 31 2007, 16:32
|- - Сергей Борщ   Цитата(zltigo @ Mar 31 2007, 15:32) Да не...   Mar 31 2007, 16:45
|- - zltigo   Цитата(Сергей Борщ @ Mar 31 2007, 15:45) ...   Mar 31 2007, 17:03
- - Ykidia   ЦитатаВы же данные не тем концом суете. Вообще-то ...   Mar 31 2007, 20:59
|- - Сергей Борщ   Цитата(Ykidia @ Mar 31 2007, 19:59) Ну а ...   Mar 31 2007, 22:57
|- - defunct   Цитата(Ykidia @ Mar 31 2007, 19:59) Вообщ...   Apr 1 2007, 04:56
|- - zltigo   Цитата(defunct @ Apr 1 2007, 03:56) Я бы ...   Apr 1 2007, 09:18
- - sensor_ua   ЦитатаЯ бы так ни в жизнь не написал А меня задолб...   Apr 1 2007, 08:27
- - Ykidia   ЦитатаЯ бы попробовал с таким максимально простым ...   Apr 1 2007, 23:48
|- - defunct   Цитата(Ykidia @ Apr 1 2007, 22:48) и оказ...   Apr 2 2007, 00:08
- - Ykidia   Доброе утро! ЦитатаV32 это естьtypedef volati...   Apr 2 2007, 00:18
- - Ykidia   Господа! Прошу простить меня за беспокойство...   Apr 3 2007, 16:37
- - Ykidia   Забыл сказать всем ответившим - большое спасибо за...   Apr 3 2007, 22:34


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 15:27
Рейтинг@Mail.ru


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