Страница 1 из 1
помогите понять 93с46 на сетевухе.
Добавлено: Пт янв 20, 2006 21:59:02
Spider
Есть сетевуха ISA NE2000 на чипе UM9008F, нашёл её описание в DM9008F.pdf где-то в гугле, на этой сетевухе напаян ЕЕПРОМ 94C46.
У самой сетевухи есть команда работы с еепром "на прямую" иначе никак. Есть команда с параметром, биты параметра есть НОГИ самой 93c46, т.е. одной записью в этот регистр я изменяю значения на ногах 93с46.
Теперь лезу в даташит 93c46 и ищу как же с него читать.
нахожу чт-то типа: 110{address[7]}{data[8]}. Ну в даташите вроде описано как и чё.
Тока у меня не получается

Допустим я правильно понял работу с сетевухой (ну инициализацию она проходит с горем пополам). Помогите с 93с46.
У неё есть
Select,
Clock, Data
In и Data
Out.
Чтобы что-то прочитать я должен:
- Выставить
S в 1 на всю протяжённость операции.
- Менять значение
C с каждым "шагом".
- Передать туда 110 по
O
- передать 7 бит смещения (128 байт) по тому же
О
- после передачи 7ого бита адреса прочиать 0 с
I не меняя
C
- прочитать с
I 8 бит как значение по данному смещению опять же меняя
C. В каком положении должен быть
O?
- опустить
S в ноль.
Всё. И так 127 раз с увеличением смещения.
Это верно?
Добавлено: Пт янв 20, 2006 22:24:02
Serega
Так. Во-первых, я так понимаю, что Клок должен меняться два раза при каждой операции. То есть: в момент выставления данных С=0, выставили данные, подождпли, делаем С=1. Подождали, делаем С=0, меняем данные.
Потом я не очень понимаю, почему мы читаем вход а подаем на выход?
Добавлено: Пт янв 20, 2006 22:58:36
Spider
С млей строны это оут

В смысле со стороны сетевухи

Добавлено: Сб янв 21, 2006 08:27:09
Spider
никто не в курсе почему в таблице параметров в даташите есть ещё 2 столбика с адресом и датой?
Не получается блин!
Добавлено: Сб янв 21, 2006 08:45:23
Spider
Ничего не выходит. Всё время 0 получаю.
unsigned char cr;
Код: Выделить всё
for (unsigned char c = 0; c < 128; c++) {
cr= 0x88; //Выставляем SLECKT И прочее
cr |= _BV(1);
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)) & ~_BV(1); //Инвентируем CLOCK и снимаем DATAOUT
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
WriteRTL(CONFIGD,cr);
for (int a = 0; a < 7; a++) {
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
//Так сложно для отладки
if (c & _BV(a)) {
cr |= _BV(1);
printf("1");
} else {
cr &= ~_BV(1);
printf("0");
}
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
WriteRTL(CONFIGD,cr);
}
printf(" ");
unsigned char s=0x0;
s |= (ReadRTL(CONFIGD) & 1);
for (int a = 0; a < 8; a++) {
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)) & ~_BV(1) & ~_BV(0); //Инвентируем CLOCK и снимаем DATA_IN
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
WriteRTL(CONFIGD,cr);
if (ReadRTL(CONFIGD) & 1) {
s |= _BV(a+1);
printf("1");
} else {
printf("0");
};
}
printf (" BYTE: 0x%x\n",s);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)) & ~_BV(3) & ~_BV(1) & ~_BV(0); //Инвентируем CLOCK и снимаем DATA_IN
WriteRTL(CONFIGD,cr);
cr = (cr & ~_BV(2)) | ((~ (cr & _BV(2)) ) & _BV(2)); //Инвентируем CLOCK
WriteRTL(CONFIGD,cr);
//Завершаем операцию
WriteRTL(CONFIGD,0);
}
на выходе получается что-то вроде :
0011111 00000000 BYTE: 0x0
1011111 00000000 BYTE: 0x0
0111111 00000000 BYTE: 0x0
1111111 00000000 BYTE: 0x0
Хочу заметить, что DATA_IN и DATA_OUT это с моей стороны, со стороны 93c46 они наоборот. Для меня OUT для 93c46 - IN.
Добавлено: Сб янв 21, 2006 09:18:04
Spider
"93C46 работает в режиме 16-и битной адресации если ножка 7 (ORG) не подключена к лог. нулю."
Как это понимать. Если она в воздухе весит это как?
Добавлено: Сб янв 21, 2006 10:26:47
PoWeR
Spider писал(а):"93C46 работает в режиме 16-и битной адресации если ножка 7 (ORG) не подключена к лог. нулю."
Как это понимать. Если она в воздухе весит это как?
Подозреваю это надо понимать так: если не лог 0, значит лог 1, значит работаем в 16 бит. адресации. Если висит в воздухе - значит лог 1 на ней нет - значит в 16 бит. адресации не работаем. Но возможно что я не прав.
Добавлено: Сб янв 21, 2006 13:30:55
Serega
Не, просто когда нога висит в воздухе, вообще нельзя быть уверенным, какой на ней уровень. Может быть как 1 так и 0. Зависит от расположения звезд, направления ветра и политической обстановки на ближнем Кавказе.

Добавлено: Сб янв 21, 2006 15:28:53
Spider
Итак. Значит надо её куда-то прислюнить? Если на хемлю это 0, а если на питание 1? Я правильно понял?
Добавлено: Сб янв 21, 2006 15:29:56
Serega
Прална мыслите, товарищ

Добавлено: Сб янв 21, 2006 16:48:28
Spider
Странно. Ну дык на сетевухе оно никуда не прислюнено. Значит работает

Добавлено: Сб янв 21, 2006 19:08:23
Spider
Господа! Вынул я 93с46 из кроватки на сетевухе и воткнул туда 3 диода (GND->DataOut,Clock,Select) "играясь" с комангдами сесетевухи (CONFIGD) удаётся зажигать и тушить диоды. Всё клёва, т.е. команды до микрухи пои доходят (надо пологать) Теперь немного о 4ой ноге, та что DataIn (со стороны сетевухи), что бы я туда ни писал она всегда 0 (и правильно, ведь от туда тока читать). Теперь мне моя логика подсказывает, что если я замкну на эту ногу +5V (выставлю туда лог. 1) и буду читать значения с регистра CONFIGD, то должен получать 1 в младшем бите. Ну как сказать... НЕ ПОЛУЧАЮ! Получаю только то что последним туда записал

если записал туда 0, то и читаю 0. Как читать-то?