помогите понять 93с46 на сетевухе.

Обсуждаем цифровые устройства...
Ответить
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

помогите понять 93с46 на сетевухе.

Сообщение Spider »

Есть сетевуха ISA NE2000 на чипе UM9008F, нашёл её описание в DM9008F.pdf где-то в гугле, на этой сетевухе напаян ЕЕПРОМ 94C46.

У самой сетевухи есть команда работы с еепром "на прямую" иначе никак. Есть команда с параметром, биты параметра есть НОГИ самой 93c46, т.е. одной записью в этот регистр я изменяю значения на ногах 93с46.
Теперь лезу в даташит 93c46 и ищу как же с него читать.
нахожу чт-то типа: 110{address[7]}{data[8]}. Ну в даташите вроде описано как и чё.
Тока у меня не получается :) Допустим я правильно понял работу с сетевухой (ну инициализацию она проходит с горем пополам). Помогите с 93с46.
У неё есть Select, Clock, DataIn и DataOut.
Чтобы что-то прочитать я должен:
- Выставить S в 1 на всю протяжённость операции.
- Менять значение C с каждым "шагом".
- Передать туда 110 по O
- передать 7 бит смещения (128 байт) по тому же О
- после передачи 7ого бита адреса прочиать 0 с I не меняя C
- прочитать с I 8 бит как значение по данному смещению опять же меняя C. В каком положении должен быть O?
- опустить S в ноль.
Всё. И так 127 раз с увеличением смещения.
Это верно?
Реклама
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Так. Во-первых, я так понимаю, что Клок должен меняться два раза при каждой операции. То есть: в момент выставления данных С=0, выставили данные, подождпли, делаем С=1. Подождали, делаем С=0, меняем данные.

Потом я не очень понимаю, почему мы читаем вход а подаем на выход?
Лучше быть первым в деревне, чем вторым в Риме
Реклама
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

С млей строны это оут :) В смысле со стороны сетевухи :)
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

никто не в курсе почему в таблице параметров в даташите есть ещё 2 столбика с адресом и датой?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Не получается блин!

Сообщение 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.
Реклама
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

"93C46 работает в режиме 16-и битной адресации если ножка 7 (ORG) не подключена к лог. нулю."
Как это понимать. Если она в воздухе весит это как?
Реклама
PoWeR

Сообщение PoWeR »

Spider писал(а):"93C46 работает в режиме 16-и битной адресации если ножка 7 (ORG) не подключена к лог. нулю."
Как это понимать. Если она в воздухе весит это как?
Подозреваю это надо понимать так: если не лог 0, значит лог 1, значит работаем в 16 бит. адресации. Если висит в воздухе - значит лог 1 на ней нет - значит в 16 бит. адресации не работаем. Но возможно что я не прав.
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Не, просто когда нога висит в воздухе, вообще нельзя быть уверенным, какой на ней уровень. Может быть как 1 так и 0. Зависит от расположения звезд, направления ветра и политической обстановки на ближнем Кавказе. :))
Лучше быть первым в деревне, чем вторым в Риме
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

Итак. Значит надо её куда-то прислюнить? Если на хемлю это 0, а если на питание 1? Я правильно понял?
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

Прална мыслите, товарищ :)
Лучше быть первым в деревне, чем вторым в Риме
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

Странно. Ну дык на сетевухе оно никуда не прислюнено. Значит работает :)
Аватара пользователя
Spider
Опытный кот
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск
Контактная информация:

Сообщение Spider »

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

Вернуться в «Цифровая техника»