Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с микросхемой памяти FM25W256 от Ramtron
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Цифровые схемы, высокоскоростные ЦС
Zlodei
Помогите разобраться!!!!
Не могу считать ни статусный регистр, ни один байт памяти.
Выход микросхемы находится всегда в третьем состоянии.
Нога запрещения записи #WP подана через 1к резистор на +5В.
Нога #HOLD на земле.
Схема подключения трехпроводная, подключение к pic30f2011.
выводы памяти SO/SI (выход/вход данных) подключены к RC13;
вывод памяти #CS (выбор микросхемы) подключены к RC14;
вывод памяти SCK (синхроимпульсы) подключены к RC15.
Пробовал разъединять вход и выход данных, всё по прежнему, на выходе ИМС памяти ни чего.
Все тайминги проверял, вроде соответсвуют заявленным в DataSheet!

Помогите разобраться!!!!
Код программы содержит инициализацию памяти и дальнейшее чтение статусного регистра в бесконечном цикле.

Код
#include "p30fxxxx.h"
#include <libpic30.h>
#include <adc12.h>

_FOSC(0xFFE3);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PWRT_OFF);
_FGS(CODE_PROT_OFF);
_FICD(ICS_PGD);

unsigned int N;
unsigned int Nstr;

void WriteCom(unsigned char wrcom) //Transmite byte of data
{
unsigned char i;
unsigned char j;
for (i=0;i<8;i++)
    {
    PORTCbits.RC13=wrcom%0x02;
    for (j=0;j<2;j++);
    PORTCbits.RC15=1;
    for (j=0;j<2;j++);
    PORTCbits.RC15=0;
    for (j=0;j<2;j++);
    wrcom=wrcom/0x02;
    };
}

void InitMem ()  //Initializate memory
{
unsigned int j;
unsigned int i;
LATCbits.LATC14=0; //WREN
WriteCom(0x60);
for (j=0;j<2;j++);
LATCbits.LATC14=1;
for (j=0;j<2;j++);
LATCbits.LATC14=0; //WRSR
WriteCom(0x80);
WriteCom(0x41);
for (j=0;j<2;j++);
LATCbits.LATC14=1;
for (j=0;j<2;j++);
}

int main()
{
OSCCON=0xff34;
ADPCFG = 0xFFFF;
TRISCbits.TRISC15=0; //SCK
PORTCbits.RC15=0;
TRISCbits.TRISC14=0; // #CS
LATCbits.LATC14=1;
TRISCbits.TRISC13=0; // SI/SO
PORTCbits.RC13=0;

int k=0;
unsigned int i;
unsigned char j;
unsigned int rd=0;
for (i=0;i<4;i++)  //Timing for start memory
{
for (rd=0x00;rd<0x93fe;rd++);
};
InitMem();
N=0;
Nstr=0;
unsigned int match_value=0x55;

while (1)
{
LATCbits.LATC14=0; //WREN
WriteCom(0x60);
for (i=0;i<2;i++);
LATCbits.LATC14=1;
for (i=0;i<2;i++);

LATCbits.LATC14=0;
WriteCom(0xa0);
TRISCbits.TRISC13=1;
for (j=0;j<8;j++)
        {
        for (i=0;i<2;i++);
        PORTCbits.RC15=1;
        for (i=0;i<2;i++);
        rd=rd+PORTCbits.RC13;
        rd=rd*0x2;
        PORTCbits.RC15=0;
        for (i=0;i<2;i++);
        };
LATCbits.LATC14=1;
for (i=0;i<2;i++);
TRISCbits.TRISC13=0;
for (i=0;i<2;i++);
}
    return 0;
}
alexPec
Цитата(Zlodei @ Aug 26 2011, 19:41) *
Помогите разобраться!!!!

А у Вас не подделка случаем? Тестером померяйте ногу данных на + и -, думаю должно показать внутренние диоды на + и -, может внутри и кристалла то нет?
VCO
Цитата(Zlodei @ Aug 26 2011, 18:41) *
Нога #HOLD на земле.

Читаем даташит:
Цитата
Hold: The /HOLD pin is used when the host CPU must interrupt a memory operation
for another task. When /HOLD is low, the current operation is suspended. The device
ignores any transition on SCK or /CS. All transitions on /HOLD must occur while
SCK is low.

и переводим:
Цитата
Hold: Вывод / HOLD используется тогда, когда ЦПУ должно прервать работу памяти
для другой задачи. Когда / HOLD в низком уровне, текущая операция приостановлена. Устройство
игнорирует любые изменения уровня на SCK и / или CS. Все изменения на / HOLD должны произходить тогда,
когда SCK находится в низком уровне.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.