Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Общетехнические вопросы

Общетехнические вопросы Общие вопросы аналоговой и цифровой электроники.

Ответ
 
Опции темы Опции просмотра
Старый 20.02.2019, 12:42   #1
AndreyKin
Senior Member
 
Регистрация: 19.03.2014
Адрес: Лобня
Возраст: 36
Сообщений: 131
Вес репутации: 597/27
AndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to all
По умолчанию EEPROM AT25256B

Прошу помощи с микросхемой AT25256B, которая подключена к dsPIC33FJ128GP710A. Чтобы я с ней не делал, выход AT25256B висит в Z состоянии. Скриншоты с анализатора прилагаю.

Инициализация SPI
Код:
/* =============================================================================
 * КОНФИГУРАЦИЯ SPI2 (AT25256B)
 * ---------------------------------------------------------------------------*/
void CONFIG_SPI2 ( void )
{
    /* Настройка IO */
TRISGbits.TRISG6  = 0; // SCK
TRISGbits.TRISG7  = 1; // SDI
TRISGbits.TRISG8  = 0; // SDO
SPI2_CS_OFF;
TRISCbits.TRISC2 = 0; // SPI2_ROM_CS
TRISCbits.TRISC3 = 0; // ROM_HLD
TRISCbits.TRISC4 = 0; // ROM_WP
SPI2_CS_OFF;
SPI2_HOLD_ON;
SPI2_WP_ON;


    /* Настройка SPI2 */
SPI2STATbits.SPIEN = 0; // Отключаем SPI (иначе не установишь параметры)

SPI2CON1bits.MODE16 = 0; // используются 8"битные данные (изменение во время работы сбросит модуль SPI)
SPI2CON1bits.SSEN = 0; // бит SSx не используется и управляется как порт
SPI2CON1bits.MSTEN = 1; // работа в режиме «ведущего»

SPI2CON1bits.CKP = 0; // активное состояние – низкий уровень
SPI2CON1bits.CKE = 0; // Последовательные выходные данные изменяются по заднему фронту тактового сигнала
SPI2STATbits.SPIROV = 0; // Очистить флаг переполнения буфера приёмника
// Скорость 40 000 000 / 2 / 16 = 1 250 000
SPI2CON1bits.SPRE = 0b110; // Установка коэффициента деления второго предделителя в режиме «ведущего» (111 – соотношение 1:1; 110 – соотношение 2:1; 000 – соотношение 8:1)
SPI2CON1bits.PPRE = 0b01; // Установка коэффициента деления второго предделителя в режиме «ведущего» (11 – соотношение 1:1; 10 – соотношение 4:1; 01 – соотношение 16:1; 00 – соотношение 64:1)
IFS2bits.SPI2IF = 0; //Сбрасываем флаг прерывания
IFS2bits.SPI2EIF = 0; // Запретить прерывания
SPI2STATbits.SPIEN = 1; // Включаем SPI2
}
Код:
#define SPI2_CS_OFF             LATCbits.LATC2 = 1;
#define SPI2_HOLD_OFF           LATCbits.LATC3 = 1;
#define SPI2_WP_OFF             LATCbits.LATC4 = 1;
#define SPI2_CS_ON              LATCbits.LATC2 = 0;
#define SPI2_HOLD_ON            LATCbits.LATC3 = 0;
#define SPI2_WP_ON              LATCbits.LATC4 = 0;

/*******************************************************************************
 * <================ ИНСТРУКЦИИ (OP-codes) Flash-ROM ==========================>
 */
// Instruction Set
#define     IS_WREN             0b00000110  // Разрешение записи. Pin WP д.б. = 1. IS предшествует всем операциям программирования
#define     IS_WRDI             0b00000100  // Отключает запись (защита). Не зависят от Pin WP
#define     IS_RDSR             0b00000101  // Чтение регистров состония
#define     IS_WRSR             0b00000001  // Устанока битов защиты (BP0, BP1), Pin #WP (WPEN)
#define     IS_READ             0b00000011  // Чтение. Пишем адрес, затем читаем DATA. Можно непрерывно и неограниченно.
#define     IS_WRITE            0b00000010  // Запись. RDSR[0]==0; #WP = 1; IS_WREN; IS_WRITE; ADDRESS;
Код:
/*******************************************************************************
 * <================ УСТАНОВИТЬ/СНЯТЬ ЗАЩИТУ ЗАПИСИ БЛОКОВ ====================>
 */
void ROM_SetBP (u8 BP1, u8 BP0)
{
    u8 RDY = 1; // Считаем, что ROM занята
    
    
    SPI2_WP_OFF;
    NOP15;NOP15;NOP15;NOP15;
    SPI2_CS_ON;
    NOP15;NOP15;NOP15;NOP15;
    SPI2_HOLD_OFF;
    // Проверяем, ROM свободна или нет
    do {
        SPI2_CS_ON;
        SPI2_uBYTE(IS_RDSR);
        RDY = SPI2_uBYTE(0);
        SPI2_CS_OFF;
        RDY = RDY && 0b00000001; // 0 - готов, 1 - идет запись
    } while (RDY); // Пока запись крутим цикл
    
    NOP15;
    
    SPI2_CS_ON;
    SPI2_uBYTE(IS_WREN); // Требуем разрешить запись
    SPI2_CS_OFF;
    
    NOP15;
    
    SPI2_CS_ON;
    SPI2_uBYTE(IS_WRSR); // Будем писать в статусный регистр
    if ((BP1 == 0) && (BP0 == 0)) {SPI2_uBYTE(0b00000100);}  // WPEN = 0;   BP1 = 0; BP0 = 0;
    if ((BP1 == 0) && (BP0 == 1)) {SPI2_uBYTE(0b00000100);}  // WPEN = 0;   BP1 = 0; BP0 = 1;
    if ((BP1 == 1) && (BP0 == 0)) {SPI2_uBYTE(0b00001000);}  // WPEN = 0;   BP1 = 1; BP0 = 0;
    if ((BP1 == 1) && (BP0 == 1)) {SPI2_uBYTE(0b00001100);}  // WPEN = 0;   BP1 = 1; BP0 = 1;
    SPI2_CS_OFF;
}
Код:
/*******************************************************************************
 * <================ ПЕРЕДАТЬ и ПОЛУЧИТЬ БАЙТ u ПО SPI2 =======================>
 */
u8 SPI2_uBYTE(u8 wd)
{
u8 SPI2data = 0;

while(SPI2STATbits.SPITBF); // Ожидаем когда освободится буфер от передачи
SPI2BUF = wd; // Передаем посылку (старшим битом вперед)

while(!SPI2STATbits.SPIRBF); // Ожидаем получения данных
SPI2data = SPI2BUF;
return SPI2data;
}
Вроде и не было никогда проблем с SPI, а тут на тебе - нихрена не могу микросхемку одолеть...
Миниатюры
AT25256_a.jpg   AT25256_b.jpg   AT25256_c.jpg  
AndreyKin вне форума   Ответить с цитированием
Старый 20.02.2019, 20:05   #2
siargy
Senior Member
 
Аватар для siargy
 
Регистрация: 03.07.2007
Адрес: Минск
Возраст: 40
Сообщений: 900
Вес репутации: 1351/68
siargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud of
По умолчанию Re: EEPROM AT25256B

по анализатору всё верно. может микросхема неисправна?
__________________
Построил тепличку, посеял литопсы, вырастил кактусы

Последний раз редактировалось siargy; 20.02.2019 в 20:19.
siargy вне форума   Ответить с цитированием
Старый 21.02.2019, 07:57   #3
AndreyKin
Senior Member
 
Регистрация: 19.03.2014
Адрес: Лобня
Возраст: 36
Сообщений: 131
Вес репутации: 597/27
AndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to all
По умолчанию Re: EEPROM AT25256B

Цитата:
Сообщение от siargy Посмотреть сообщение
по анализатору всё верно. может микросхема неисправна?
Как говорится - ХЗ Микросхемы были куплены в чипдип, несколько штук. Одну перепаял, ничего не изменилось. Конечно, нужно бы купить где-то еще и еще раз поменять.
AndreyKin вне форума   Ответить с цитированием
Старый 26.02.2019, 10:31   #4
AndreyKin
Senior Member
 
Регистрация: 19.03.2014
Адрес: Лобня
Возраст: 36
Сообщений: 131
Вес репутации: 597/27
AndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to allAndreyKin is a name known to all
По умолчанию Re: EEPROM AT25256B

В общем разобрался. Нужно инициализировать SPI в другом режиме:
Код:
SPI2CON1bits.CKP = 1;
SPI2CON1bits.CKE = 0;
В коде
Код:
    do {
        SPI2_CS_ON;
        SPI2_uBYTE(IS_RDSR);
        RDY = SPI2_uBYTE(0);
        SPI2_CS_OFF;
        RDY = RDY && 0b00000001;
    } while (RDY);
RDY = RDY && 0b00000001; заменить на RDY = RDY & 0b00000001;

Осциллограммы чтения/записи Статус-регистра и запись/чтение одного байта данных.
Миниатюры
s1.png   s2.png   s3.png  
AndreyKin вне форума   Ответить с цитированием
Ответ

Метки
at25128, at25256


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время записи в EEPROM PIC12F683 kaligraf Вопросы начинающих 2 12.04.2016 02:00
EEPROM в PIC16F84 miksayer Вопросы начинающих 14 09.03.2012 18:41
PIC16F877 EEPROM стирается после выключения питания alx71 Продукция MICROCHIP 15 16.12.2010 10:00
Внутренний EEPROM 16F84A nayabuka Продукция MICROCHIP 29 25.03.2008 10:59
PIC18F452 не пишет в EEPROM tzirulnicov Продукция MICROCHIP 2 03.01.2008 16:10


Часовой пояс GMT +3, время: 19:52.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot