Рабоче-техническое.
Sep. 10th, 2007 09:59 pmЯ с ума сойду от этой микросхемы.
Обнаружил ваще непонятное. Похоже, таки настоящий глюконат железа.
Преамбула №1. Внутри оного чипа (STR912), кроме самого процессорного ядра (ARM9) и периферии, есть ещё один кристалл - отдельная флэш-память, второй массив. Ещё на процессорном ядре присутствует некая штука типа упрощённой до предела ПЛИС уровня CPLD - матрица перекоммутации выводов. Т.е. некоторые выводы некоторых периферийных устройств можно перекинуть на разные ножки чипа. Не любые и не на любые, естественно. Скажем, вывод передатчика UART0 можно кинуть на пин 2 порта 3 или на пин 3 порта 4 (я щас буквально-точно не помню - там никакой системы нет, поэтому "понять эта нэвазьможна, надо толко запомныть!". Вернее, всё время с даташитом сверяться). А вывод приёмника того же UART0 можно кинуть на пин 2 порта 4 или пин 3 порта 5. Вот как-то так.
Преамбула №2. Я редко когда пишу программу с нуля и до конца сразу полностью. Предпочитаю написать кусочек и отладить его, потом написать следующий - отладить и так далее. Так и здесь - сначала потестировал работу ножек чипа, затем последовательные порты, затем приступил к налаживанию связи с ПЛИС.
Амбула. Раскидав выводы по нужным пинам, я ожидал получить ожидаемый результат - предполагалось, что уже отлаженная программочка будет принимать некие команды с UART, в соответствии с ними делать определённые действия и слать ответы. Это намного проще, чем возня с JTAG (хотя совсем без этой возни не обойтись). В общем, запускаю программку и ... нифига. То есть наполовинуфига. Слать-то она шлёт, но ничего не принимает! Думаю, что за байда - провод отошёл, чтоли? Нет всё на месте... любопытства ради закрываю комментами инициализацию группы пинов, которую я добавил позже всех. Программка работает, как и надо. Убираю коммент. Не работает.
Логично было бы предположить, что вышеупомянутая матрица перекоммутации выводов тут помешалась, отключив принимающий вывод UARTа от соответствующей ножки чипа. Но! Эти ножки НИКАК ВООБЩЕ не связаны! Даже близко не валялись! И по всем выкладкам выходило, что мешаться друг другу они не должны. А на деле - мешаются.
Что такое, как же ж так? Ситуация напоминает любимый момент в комедиях положений - когда персонаж, скажем, вставляет в дверной замок ключ, в результате чего в коридоре где-нибудь открывается окно. Ключ вынимает - окно закрывается. Вставляет - открывается. Связи быть не должно, но она есть.
И что с этим делать - ума не приложу... Плату уже не переразвести, времени нет.
P.S. Заодно придумал тэг.
Обнаружил ваще непонятное. Похоже, таки настоящий глюконат железа.
Преамбула №1. Внутри оного чипа (STR912), кроме самого процессорного ядра (ARM9) и периферии, есть ещё один кристалл - отдельная флэш-память, второй массив. Ещё на процессорном ядре присутствует некая штука типа упрощённой до предела ПЛИС уровня CPLD - матрица перекоммутации выводов. Т.е. некоторые выводы некоторых периферийных устройств можно перекинуть на разные ножки чипа. Не любые и не на любые, естественно. Скажем, вывод передатчика UART0 можно кинуть на пин 2 порта 3 или на пин 3 порта 4 (я щас буквально-точно не помню - там никакой системы нет, поэтому "понять эта нэвазьможна, надо толко запомныть!". Вернее, всё время с даташитом сверяться). А вывод приёмника того же UART0 можно кинуть на пин 2 порта 4 или пин 3 порта 5. Вот как-то так.
Преамбула №2. Я редко когда пишу программу с нуля и до конца сразу полностью. Предпочитаю написать кусочек и отладить его, потом написать следующий - отладить и так далее. Так и здесь - сначала потестировал работу ножек чипа, затем последовательные порты, затем приступил к налаживанию связи с ПЛИС.
Амбула. Раскидав выводы по нужным пинам, я ожидал получить ожидаемый результат - предполагалось, что уже отлаженная программочка будет принимать некие команды с UART, в соответствии с ними делать определённые действия и слать ответы. Это намного проще, чем возня с JTAG (хотя совсем без этой возни не обойтись). В общем, запускаю программку и ... нифига. То есть наполовинуфига. Слать-то она шлёт, но ничего не принимает! Думаю, что за байда - провод отошёл, чтоли? Нет всё на месте... любопытства ради закрываю комментами инициализацию группы пинов, которую я добавил позже всех. Программка работает, как и надо. Убираю коммент. Не работает.
Логично было бы предположить, что вышеупомянутая матрица перекоммутации выводов тут помешалась, отключив принимающий вывод UARTа от соответствующей ножки чипа. Но! Эти ножки НИКАК ВООБЩЕ не связаны! Даже близко не валялись! И по всем выкладкам выходило, что мешаться друг другу они не должны. А на деле - мешаются.
Что такое, как же ж так? Ситуация напоминает любимый момент в комедиях положений - когда персонаж, скажем, вставляет в дверной замок ключ, в результате чего в коридоре где-нибудь открывается окно. Ключ вынимает - окно закрывается. Вставляет - открывается. Связи быть не должно, но она есть.
И что с этим делать - ума не приложу... Плату уже не переразвести, времени нет.
P.S. Заодно придумал тэг.