Jump to content

    

VslavX

Свой
  • Content Count

    1046
  • Joined

  • Last visited

Posts posted by VslavX


  1. Ну, хоть бы пример привели, а то так не интересно.

    У меня есть такой случай, при котором надо сбросить контекст прерывания и выйти в конкретную точку.

    АЦП работает обычно в режиме free-running, один из каналов следит за внешним питающим напряжением (часто там аккумулятор). Непрерывный анализ этого напряжения производится в прерывании. Можно было бы отдельную высокоприоритетную задачу завести, но жаль времени на постоянное переключение контекста и место под стек, к тому же там есть ряд нюансов с критическими секциями. И вот когда это напряжение становится ниже порога и нет критической секции, то надо выключить всех потребителей и перевести изделие в режим микропотребления. При этом RTOS уже не нужна - работает специальная процедура - вот тут то и потребовалось сделать возврат из прерывания в особую точку. Еще вариант - критическая ошибка в прерывании, когда надо выдать аналог BSOD - тут тоже желательно выйти (для некоторых архитектур) из режима прерывания. Ну а вообще, да - осознанный возврат "налево" при штатной работе (особенно если еще есть RTOS) то как бы "не камильфо". Нужно только в критических случаях, RTOS после этого уже не живет, а изделие в целом выходит в останов/спячку.

     

     

  2. В-общем, проделал я такие тесты:

    Карта Transcend 512M
    - подали питание и инициализировали
    - выполнили CMD42 с полным стиранием
    
    номер    время в   дельта
    записи   микросек  номера
    
    - 1 запись на сектор
    001099: 167556  +1099
    003099: 163378  +2000
    005099: 162215  +2000
    007099: 164809  +2000
    008099: 63701  +1000
    009099: 165216  +1000
    011099: 163590  +2000
    013099: 163729  +2000
    
    - 1 запись на сектор, повтор
    001897: 164404  +1897
    003897: 164989  +2000
    004897: 66539  +1000
    005897: 168102  +1000
    007897: 166940  +2000
    009897: 163613  +2000
    011897: 167304  +2000
    
    - 128  записей на сектор
    000639: 209017  +639
    001150: 211718  +511
    001661: 209965  +511
    002172: 213462  +511
    002683: 209975  +511
    002733: 65913  +50
    003194: 210256  +461
    003705: 212577  +511
    004216: 212983  +511
    004727: 212452  +511
    005238: 210349  +511
    
    - 1 запись на сектор
    000158: 211175  +158
    000414: 213704  +256
    000670: 214446  +256
    000926: 213426  +256
    001024: 33885  +98
    001042: 165776  +18
    003042: 167437  +2000
    005042: 163185  +2000
    
    - приводим карту "к печке"
    - подали питание и инициализировали
    - выполнили CMD42 с полным стиранием
    - 1 запись на сектор
    000599: 64916  +599
    001099: 168699  +500
    003099: 164326  +2000
    005099: 162175  +2000
    007099: 164776  +2000
    009099: 168463  +2000
    

     

    Видно что после приведения "к печке" становится лучше (залеты каждые 2000 секторов), но таки "не совсем хорошо" - спорадические задержки остаются. Увы,значит CMD42 - не панацея :(.

  3. 1. Команда CMD42, если я все правильно понимаю, предназначена для блокирования/разблокирования карты.

    Да, для блокирования-разблокирования. Но, допустим, у Вас есть карта с установленным паролем, и Вы его забыли. Что делать? Выкидывать всю карту? Ж-а-а-а-лко :) Вот поэтому и есть опция ERASE - снимается пароль, а перед этим стираются все данные которые были этим паролем защищены, так сказать карта приводится "к печке" - в некоторое начальное состояние. Кстати, я использовал в тестах стирание через команду CMD42 не потому что "что-то знал", а просто у меня был готовый код и лень было писать процедуры с использованием CMD38.

     

    Установка в этой команде флажка ERASE приведет к тому, что в дальнейшем картой будут блокироваться запросы на стирание.

    Хм, а почему Вы так думаете? Я что-то пропустил/недопонял в стандарте?

     

    возможно ли как то хотя бы взглянуть на Ваши условия тестирования и полученные результаты ??? :rolleyes:

    Взглянуть можно на функцию теста - она очень простая. Варьируя число в цикле j<128 я пробовал разное количество записей в один и тот же сектор, и выводил к консоль время выполнения операций которые длились более 10мс. Снаружи еще была функция стирания по CMD42 - все эти тестовые функции можно было запускать по клавишам в консоли в произвольном порядке.

    Точных результатов, к сожалению, не помню, и этот-то кусочек кода случайно сохранился. Сначала я выводил информацию о времени всех операций в файл - получил представление о среднем времени записи и о спорадических задержках. Потом выполнил CMD42 и увидел что ситуация намного улучшилась если одна запись в один сектор. Ну а потом уже поставил лимит time<10000 - и игрался наблюдая только задержки.

     

    static void io_test_mmc_wsecbytes(void)
    {
    IO_STATUS io_status;
    DWORD size, i, j, time, n;
    
    n = 0;
    size = io_mmc_size();
    if (size != 0)
    {
    	for(i=0; i<size; i++)
    	{
    		tst_printf("\r\nSector: %08X\f", i);
    
    		hal_memset(mmc_udma, 0xFF, sizeof(mmc_udma));
    		for(j=0; j<128; j++)
    		{
    			DWORD old;
    
    			mmc_udma[j] = i + j;
    
    			tn_task_raise_priority(TN_UPPER_APP_PRIORITY, &old);
    			time = hal_profiler_counter();
    			io_status = io_mmc_write(i, 1, mmc_udma);
    			time = hal_profiler_elapsed_us(time);
    			tn_task_lower_priority(old);
    
    			if (io_status != IOERR_SUCCESS)
    			{
    				tst_printf("\r\nWrite %08X sector error: %d", i, io_status);
    				return;
    			}
    			if (time > 10000)
    			{
    				tst_printf("\r\n %06d: %d\f", n, time);
    			}
    			n++;
    			tn_task_sleep(MS_TO_TICKS(10));
    			if (hal_inkey() != 0)
    			{
    				return;
    			}
    			io_status = io_mmc_read(i, 1, mmc_ndma);
    			if (io_status != IOERR_SUCCESS)
    			{
    				tst_printf("\r\nRead %08X sector error : %d", io_status);
    				return;
    			}
    			if (hal_memcmp(mmc_ndma, mmc_ndma, IO_MMC_BLOCK_SIZE))
    			{
    				tst_printf("\r\nRead data back are wrong");
    				return;
    			}
    		}
    	}
    }
    }
    

    Upd: я тут еще заметил что у меня пауза между операциями в 10 мс стоит, надо бы повторить тест без нее - а то не совсем чисто получается.

    Upd2: только что попробовал старую SD-micro карту на 512Мбайт - так она и по 128 записей на сектор и без предварительного стирания всегда в 10 мс укладывается. Я примерно час буду занят - потом попробую более тостые карты и без задержки 10 мс - отпишусь.

  4. Так вот у меня возник вопрос к "VslavX" !!! Что это за команда такая предварительного стирания SET_LOCK_UNLOCK, которой Вы пользовались и которая Вам так облегчила жизнь ????? Можете написать ее номер ???

    CMD42, с установленным флажком ERASE.

    По идее - команда обычного стирания (CMD38) тоже должна помочь, но ее я не пробовал. Возможно у Вас в один и тот же сектор пишется несколько раз после стирания (если там файловая система типа FAT, то такое вполне может быть) - поэтому задержки не устранились.

     

  5. а смысл в таком нестандартном решении?

    Может быть автор вопроса имел ввиду 1000BASE-TX - там вроде раздельные пары в каждом направлении и по каждой паре 500мбит/сек. Сейчас нигде практически не встречается - требует качественных кабелей категории 6, и заменен на 1000BASE-T.

     

  6. Да как сказать! Мне приходиться писать каждые 100mC 32кБ, с учетом того, есть еще подготовительные операции, то на запись в SD-card отводится 25mC(max), поэтому для меня это проблема.

    Я недавно занимался тестированием SD-карт, в том числе измерял время записи сектора при массированной последовательной записи блоков различной длины. Поделюсь результатами и своей теорией.

    Тест 1 - пишем последовательно в сектор записи по 16 байт, сектор закончился - берем следующий, с номером на единичку большим. Результат - типовое время записи порядка 1 мс (несколько зависит от типа карты и класса), но каждые примерно N записей - провал с некоторым типовым значением. Это значение составляет от 30 мс у самой быстрой новейшей SD 3.0 карты (30Мбайт/сек) до 300 мс у нестарой и заявленной как класс 4 SDHC. Карты 4-5 летней давности уложились в пределы 60-150мс.

    Тест 2 - карта предварительно стерта командой SET_LOCK_UNLOCK. Пишем последовательно по целому сектору - типовое время записи сектора осталось то же самое, периодические 'выбросы' тоже есть, но они сократились очень значительно - ну раза в полтора-два больше чем типовое время записи. То есть карта в худшем случае 'думает' всего 2..5мс.

    Eще был ряд тестов с привлечением команд стирания, я уже деталей полностью не помню.

    Выводы у меня такие - карта, ее внутренний контроллер и его прошивка это черный ящик, но - 99% что основной массив флеш памяти "исповедует" принципы NAND - можно писать страницами (под размер сектора) и стирать только блоками (группами страниц). Отсюда следует основа алгоритма записи - заводится внутри некоторый пул свободных стертых страниц (размер пула равен периоду 'выбросов' времени записи), когда он заканчивается - информация переносится в основное хранилище - или ремаппингом (изменением индексов в базе) или тупо перезаписыванием. Также есть сильное подозрение что если есть возможность записывать сектор сразу на постоянное место (пишущийся сектор в основном массиве "стерт") то пишется на постоянное место.

    Итого - если нужный набор секторов стереть (командами стирания) и писать каждый сектор не более одного раза - то такие 'спорадические' увеличения времени записи можно в большинстве случаев купировать. Эксперимент это подтверждает, проверено около 10 карт SD/SDHC разного возраста, объема и производителей.

    Выявился еще интересный результат тестов - если в момент 'долгой записи' с карты снять питание (или просто стабилизатор не вытянет броска тока - жрать в этот момент карта начинает ой-ей) или подать команду сброса (так что тайм-ауты корректно все обрабатываем - это карта 'задумалась', а не умерла :)), то на некоторых картах приходит пушной зверь - могут разрушиться данные, которые вообще не имели отношения к записываемому сектору - я думаю, что разрушается внутренняя индексная база.

  7. to VslavX

     

    У RS - 422 - 500Кб/сек максимум.

     

    Жаль что пока не понял вашу идею (начинающий) , но разве исключить трансформатор для RS 422 (ключами, реле) - это не правильно?

    Реле - это банально, а хочется же - красиво :).

    Посмотрите Power-over-Ethernet - PoE, в среднюю точку выходной обмотки трансформатора подается питание (DC - постоянный ток). Можно попробовать вместо постоянки подать туда относительно низкочастотный и низкоамплитудный (пара вольт вместо 48 вольт PoE) сигнал от RS-485 - по одному выходу на каждую витую пару. Есть шанс что мешать дифференциальному сигналу ethernet оно не будет. Правда тогда не сложиться с идеальной геометрией пары RS-485, но если скорость небольшая и недалеко - то должно работать.

     

  8. А скорость по RS-485 большая?

    Интересно, получится ли совместить - подать выход RS-485 на center tap выходной обмотки импульсного трансформатора - туда куда, например, PoE подают/снимают.

     

     

  9. Просто очень подозрительно выглядит этот пункт в еррате:

    Мы не знаем как там у них флешка устроена и что у нее на выходе - там может быть, например, регистр, неизвестно на какой фазе клока защелкивающийся или просто мост на AHB тормозит - tpd высоковат. Поэтому, да - хотя и странный пункт, но не такой уж невозможный, имхо. Ну а нам, (несчастным, применившим Атмел), остается только на веру принимать - 0WS - 20MHz, 1WS - 48.1MHz, 2WS - 48.1+

    P.S. Помнится я ScmRTOS тестировал - там в примере на SAM7S 48МГц была упущена настройка 1WS - так оно спокойно себе на 0WS безошибочно молотило (я так понимаю что не только у меня но и у авторов примера). Тока быстро уж очень, что вызвало подозрение и обнаружение ошибки.

  10. Скорость работы без wait-state'ов снижена с 30 до 20МГц.

     

    Правда, до 48.1МГц разрешают работать с одним, а вот выше - фигушки. Но это очень похоже на уловки менеджмента - ущерб от возможных претензий ожидается ниже, чем ущерб от отсутствия продаж, если все написать честно :(

    Я так понимаю - они чипмейкера/техпроцесс поменяли?

    А 48МГц - оно вроде оправдано - если используется еще и USB, то именно на 48 все и работает.

     

  11. флеш сломана и на них тоже

    Я прошу прощения - а что это значит? Отошел от SAM7 пару лет назад и "выпал" из темы :(

    Или имеются ввиду возросшие WaitStates?

     

  12. А вы эти вопросы переадресуйте самому Борис Борисычу, ведь не "держава" же закрыла его производство, а он сам.

    Именно держава - нет никаких легальных возможностей для работы. "Единоналожников" обложили со всех сторон - очень многие сейчас закрываются. С 1 апреля НДС заплаченый ЧП-шнику нельзя относить в налоговый кредит. А переходить на общую систему налогооблАжения - чур меня - Украина на 181 месте в мире (из 183) по простоте уплаты налогов.

    Помимо того что сама по себе эффективная налоговая ставка около 60 процентов, так еще нужно платить косвенные налоги - административный (181 место это не просто так, это надо отдельно бухгалтера содержать, чтобы он над правильной уплатой налогов работал - от 2000 человекочасов в год), коррупционный (пожарники, СЭС, налоговики, лицензирование, таможня), инфраструктурный (нет логистики, коммуникаций и прочего что нужно для быстрого и дешевого развертывания производства). Поэтому окончательное "покращення" - только вопрос времени.

     

     

    Айда в Запорожье? Самая теплая точка на Украине +42С - абсолютный рекорд!

    То да - у нас друзья на даче под Запорожьем такой обалденный виноград выращивают - под Киевом такой ни в жисть не вырастет. А всего-то 500км на юг.

     

  13. Вот так примерно.

    %F, %B - это все ноги от убогого MASM-овского стиля локальных меток растут - далеко не самый удачный пример, имхо. Проще же написать @@Loop, @@Exit и не думать куда оно там - вперед, назад.

  14. Извините, я всю тему не смог осилить.

    Начинал я когда-то давно на MACRO-11, надо сказать мне сильно повезло, это был 'правильный' ассемблер и там сразу была заложена концепция локальных меток как в тексте программы так и в макросредствах. Поэтому эта концепция прочно засела у меня в голове и использование в инструкциях аргументов типа PC+смещение (.+смещение, $+смещение и прочее) воспринимается, мягко говоря, странно.

    Потом был Борландовский TASM, также прекрасно поддерживающий локальные метки. А вот потом пошли всякие i51, 8080, Фуджитцы, AVR (лень все перечислять - как архитектуры так и ассемблеры) и я начал сильно страдать. Если бОльшая часть ассемблеров еще как-то поддерживала локальные метки в макросах, то собственно в коде с этими метками была беда. Вот тогда пришла идея написать препроцессор локальных меток. Идея самая заурядная - в коде выделяются границы блоков локальных меток (по первому символу строки - если символ может принадлежать имени обычной (нелокальной) метки - то граница блока) и в пределах этого блока все слова с определенным префиксом (в TASM это было "@@", но можно взять любое понравившееся сочетание) заменяются на такое же слово но с удаленным префиксом и с добавленным числовым суффиксом. Таким образом локальные метки становятся общими и уникальными для текущего файла.

     

    Пример, исходный текст

    Int_UART_STxD:	push	R23			;
    	push	R17			;
    	lds	R23,SP_Flags		;
    	sbrc	R23,SNFl_RXoff		;
    	rjmp	@@SendXOFF		;
    	sbrc	R23,SNFl_RXon		;
    	rjmp	@@SendXON		;
    	sbrc	R23,SNFl_Xoff		;
    	rjmp	@@ReadyTxd		;
    					;
    	lds	R16,SP_DrvEnd		;
    	lds	R17,SP_DrvBeg		;
    	cp	R16,R17			;
    	breq	@@ReadyTxd		;
    	push	Z1			;
    	push	Z0			;
    	mov	Z0,R16			;
    	clr	Z1			;
    	subi	Z0,low(-SP_DrvBuf)	;
    	sbci	Z1,high(-SP_DrvBuf)	;
    	ld	R17,Z+			;
    	out	UDR,R17			;
    	pop	Z0			;
    	pop	Z1			;
    	inc	R16			;
    	cpi	R16,TBufSiz		;
    	brlo	@@Wrapup		;
    	clr	R16			;
    @@Wrapup:	sts	SP_DrvEnd,R16		;
    					;
    @@Exit:         sts	SP_Flags,R23		;
    	pop	R17			;
    	pop	R23			;
    	pop	R16			;
    	out	SREG,R16		;
    	pop	R16			;
    	reti				;
    					;
    @@ReadyTxd:	cbi	UCR,UDRIE		;
    	rjmp	@@Exit			;
    					;
    @@SendXOFF:	cbr	R23,(1<<SNFl_RXoff)	;
    	ldi	R16,_XOFF		;
    	out	UDR,R16			;
    	rjmp	@@Exit			;
    					;
    @@SendXON:	cbr	R23,(1<<SNFl_RXon)	;
    	ldi	R16,_XON		;
    	out	UDR,R16			;
    	rjmp	@@Exit			;
    

     

    Текст после препроцессора:

    Int_UART_STxD:	push	R23			;
    	push	R17			;
    	lds	R23,SP_Flags		;
    	sbrc	R23,SNFl_RXoff		;
    	rjmp	SendXOFF_0058		;
    	sbrc	R23,SNFl_RXon		;
    	rjmp	SendXON_0059		;
    	sbrc	R23,SNFl_Xoff		;
    	rjmp	ReadyTxd_0060		;
    					;
    	lds	R16,SP_DrvEnd		;
    	lds	R17,SP_DrvBeg		;
    	cp	R16,R17			;
    	breq	ReadyTxd_0060		;
    	push	Z1			;
    	push	Z0			;
    	mov	Z0,R16			;
    	clr	Z1			;
    	subi	Z0,low(-SP_DrvBuf)	;
    	sbci	Z1,high(-SP_DrvBuf)	;
    	ld	R17,Z+			;
    	out	UDR,R17			;
    	pop	Z0			;
    	pop	Z1			;
    	inc	R16			;
    	cpi	R16,TBufSiz		;
    	brlo	Wrapup_0061		;
    	clr	R16			;
    Wrapup_0061:	sts	SP_DrvEnd,R16		;
    					;
    Exit_0062:         sts	SP_Flags,R23		;
    	pop	R17			;
    	pop	R23			;
    	pop	R16			;
    	out	SREG,R16		;
    	pop	R16			;
    	reti				;
    					;
    ReadyTxd_0060:	cbi	UCR,UDRIE		;
    	rjmp	Exit_0062			;
    					;
    SendXOFF_0058:	cbr	R23,(1<<SNFl_RXoff)	;
    	ldi	R16,_XOFF		;
    	out	UDR,R16			;
    	rjmp	Exit_0062			;
    					;
    SendXON_0059:	cbr	R23,(1<<SNFl_RXon)	;
    	ldi	R16,_XON		;
    	out	UDR,R16			;
    	rjmp	Exit_0062			;
    

    Пишем и редактируем исходный код, а ассемблеру подсовываем результат препроцессора.

     

    Позже препроцессор оброс еще всякими полезными функциями - преобразование табуляций, удаление комментариев (недавно особенно хорошо было отрубать букву 'я' в комментах для IAR-ского кортексовского ассемблера). В-общем, программа 15 лет в строю и зарекомендовала себя как универсальный инструмент с десятком разных ассемблеров. Изначально была написана на TASM для MS-DOS, но недавно Win7 отказался запускать .com файл - пришлось переписать под Win32. Если кому-то интересно - то архив с исходниками этой крошечной утилиты в аттаче. Там же проект и уже готовая собранная утилита.

     

    atxt32.rar

  15. А как обычно применяют команду MMCMD_LOCK_UNLOCK? - а то с флешками пока не приходилось..

    Идете на www.sdcard.org и скачиваете там Simplified SD-card specification, там эта команда описана.

    Но если у Вас только кардридер - то ничего не получится (я занимался этим вопросом и искал ридеры которые позволяли бы задавать пароль - мои поиски успехом не увенчались). Это нужна система со своим микроконтроллером.

     

  16. Я имел ввиду, что при моих знаниях согласно сообщению от Kuzmi4 можно получить $90,000 - $110,000 в месяц и только в том случае, если долго и упорно работать можно получить $800,000. Я не понимаю к чему ваша реплика. Если это не так, то поделитесь другой информацией, для этого я и тему создал.

    Есть у меня смутное подозрение что Вы нас просто троллите.

    Но если (ну вдруг) Вы и вправду наивное дитя (извините, если это не так) то открытым текстом:

    - Kuzmi4 когда говорил про $800 в Киеве - имел ввиду зарплату в месяц "чистыми" (что это такое - надо объяснять?)

    - в приведеной Kuzmi4 английской цитате предлагалось $90.000-$110.000 не в Киеве в год "грязными"

    Ну как бы в таких терминах принято говорить о зарплатах в Киеве и в англомовных местах, это общеизвестно, и предполагалось что человек закончивший институт и год проработавший в индустрии такие вещи должен знать.

     

  17. После безуспешных мытарств с разлочкой microSD 2Gb SD-S02G гугловскими методами, обнаружил под наклейкой 24 (6х4) вывода. Возможно ли их использовать чтобы получить доступ к карте?

    А чем карта была залочена и какие проблемы с разлочкой? В стандарте SD все хорошо описано и команда MMCMD_LOCK_UNLOCK (код 42) вполне нормально работает).

     

  18. ничего, по мере нагревания количество потерянных пакетов возрастает до 40-50. Кто на практике сталкивался с подобным поведением? Это некорректно

    А у 1145 внутри регистра статистики случайно нету? Прочитайте внутренний счетчик ошибок приема (хорошо бы и у ответного устройства, чтобы оценить качество передачи) и сравните с общим количеством ошибок. Если есть расхождение - то возможно стоит покопать xxMII и Ваш дизайн, если нет расхождения - то возможно стоит посмотреть схему тактирования и питания.

    Я гонял два дня 88e1111 - думаю греется сильно поменьше чем 88e1145, но тоже горячая, процент ошибок - ~2/100000 9000 байтных пакетов.

     

  19. А вам прерывание для каких-то особых нужд нужно? Какой-нибудь Wake on LAN? Или что вам сканировать надо так активно?

    Да в-общем-то ничего особого сканировать не нужно - просто не люблю когда TCP-сокет полчаса выясняет что у него локальный линк отвалился, поэтому так MAC-драйвер и писался, чтобы сразу оповещать все верхние уровни о своем состоянии (плюс фильтр для кратковременных пропаданий линка) - там сразу IP сбрасывается, DHCP-клиент заново взводится, TCP сокеты уведомляются что данных больше не будет, и т.д. А то большинство реализаций стеков привыкло валить все в кучу - "TCP крут - он там сам наверху разберется", а мне такое не очень нравиться. TCP-то разберется, но "по дороге" код точной ошибки потеряет и думать долго будет. Поскольку модель стека полностью асинхронная, то ессно была вовлечена обработка прерываний и генерация событий от PHY. Конечно, можно прерывание заменить на поллинг с каким-нить подходящим периодом - но это уже код переделывать нужно (и отнюдь не один MAC-драйвер и не для одного типа PHY), так что пусть уже будет. Wake on LAN пока нету, но очень даже может быть (есть аппаратура с батарейным питанием, прикладной софт скоро дорастет до обработки сетевых событий по запросу).

     

  20. ИМХОs:

    1. Набор смайлов на электрониксе олдскульно-консервативный

    2. Лично мне (думаю и другим эмоциональным людям) имеющегося набора иногда не хватает

    3. При расширении набора смайлов люди, которым они "не нужны и нет времени", при написании сообщений ничего не заметят, при чтении - заметят, но в серьезных темах (которые "по делу") никто злоупотреблять смайлами не будет

    4. Вывод - расширение набора смайлов улучшит и разнообразит общение на форуме

  21. Кроме KSZ, есть ещё LAN8720. У него, правда, корпус еще более дикий.

    Знаю я про этот чип. У него REFCLKO совмещен с выходом запроса на прерывание. Мой код прерывания от PHY использует - жалко время на периодическое сканирование по MDI тратить. Вывод - 8720 "в топку". А корпус не более дикий чем у 8031.

     

    Тем не менее, тенденция налицо, а использовать сигнал с PLL на входе PHY строго не рекомендуется.

    Пруфлинк можете дать? Или из общих соображений? (типа этот сигнал будет опорным для внутренней PLL-ки)

     

  22. Аж один KSZ8031(51) в малоустраивающем меня корпусе (на данный момент)

    BTW, нам тоже только новый 8031 подошел, остальные - то прерывание совмещается, то не автоконфигурируется, то еще чего.

    А корпус - КуЭфЭн обычный, чего там - долго ли умеючи :)

     

    post-10038-1302595842_thumb.jpg

     

    Справедливости ради, надо заметить, что тот проект шаблончиков немало надорвал, не все "ымбеддеры" адекватно восприняли, некоторые испытали butthurt :)

    Ага. Жалко для моих задач практической ценности никакой, но сама идея очень прикольная.