|
|
  |
Olimex/Startetkit LPC23/4 + RMII KS8721BL, Баги в схеме :( |
|
|
|
Jul 5 2011, 22:05
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sasamy @ Jul 6 2011, 00:34)  .... CODE for (phy_addr = 1; phy_addr <= 31; phy_addr++) // Put PHY in reset mode write_PHY(PHY_REG_BMCR, BMCR_RESET); 1. Нет сброса по 0 адресу. 2. Тратится время на бездумную передачу 30(31) команды сброса по последовательному интерфейсу все зависимости потребуются они в последствии или нет. Соответственно эти пустые действия непонятны для изучающего вольного предположить в их наличии какой-то смысл. 3. Если в функции write_PHY() нет ожидания окончания транзакции будет облом. CODE for (phy_addr = 1; phy_addr <= 31; phy_addr++) { if ((phy_addr != DEFAULT_PHY_ADDR) && (!(read_PHY(PHY_REG_BMCR) & BMCR_RESET))) goto phy_found; } 1. Опять нет контроля по 0 адресу. 2. (phy_addr != DEFAULT_PHY_ADDR) && лишнее украшение. QUOTE (sasamy @ Jul 6 2011, 00:54)  Собственно исправление автора еще более убого чем начальный вариант - он теряет смысл, потому что весь диапазон адресов не будет проверен. Как оказалось, чукча не только не "писатель", но и не "читатель"  - типа чисто "критик". Диапазон адресов проверяется весь начиная DEFAULT_PHY_ADDR.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 5 2011, 22:18
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(zltigo @ Jul 6 2011, 01:59)  Код for (phy_addr = 1; phy_addr <= 31; phy_addr++) // Put PHY in reset mode write_PHY(PHY_REG_BMCR, BMCR_RESET); 1. Нет сброса по 0 адресу. Вообще-то это была копипаста с вашего кода, так что претензии не ко мне  Цитата 2. Тратится время на бездумную передачу 30(31) команды сброса по последовательному интерфейсу все зависимости потребуются они в последствии или нет. Вы их точно так же делаете, только в некоторых случаях меньше. На этом последовательном интерфейсе 25 МГц, а у вас первая же задержка 1 мс - о чем вообще может быть речь, эти команды пролетят когда она еще не закончится. Цитата 3. Если в функции write_PHY() нет ожидания окончания транзакции будет облом. Пожалуй на этом хватит - это ваш немного исправленый код - к вам претензии, я хотел всего лишь показать смысл моего замечания - тратится слишком много времени на ненужные ожидания, конечно немного в грубоватой форме сказано, но в принципе это был ваш тон. Цитата (phy_addr != DEFAULT_PHY_ADDR) && лишнее украшение. Ну с этим согласен - прочитать лишний раз регистр - раз плюнуть.
Сообщение отредактировал sasamy - Jul 5 2011, 22:20
|
|
|
|
|
Jul 5 2011, 22:39
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (sasamy @ Jul 6 2011, 01:18)  Вообще-то это была копипаста с вашего кода, так что претензии не ко мне  Кто-то взялся править, причем после публикации моего подчищенного, но не сумел. QUOTE Вы их точно так же делаете, только в некоторых случаях меньше. При штатном течении инициализации ровно один необходимо-достаточный сброс вместо 32. QUOTE На этом последовательном интерфейсе 25 МГц Вы не знаете и типичных скоростей MDIO интерфейсов в PHY  . Ошибка на порядок. QUOTE я хотел всего лишь показать смысл моего замечания - тратится слишком много времени на ненужные ожидания только в случае НЕШТАТНОЙ ситуации с PHY. Вместо этого Вы добавили те самые ненужные действия требующие времени и для случая штатной инициализации. Затраты времени меня особо не смущают, но порожден еще и тот самый говнокод ( делающий что-то зачем-то )  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 5 2011, 22:58
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(zltigo @ Jul 6 2011, 02:39)  Вы не знаете и типичных скоростей MDIO интерфейсов в PHY  . Ошибка на порядок. Можете считать я пропустил запятую, хотя честно говоря - это не таблица умножения чтобы все помнить наизусть, достаточно открыть любой даташит. Цитата только в случае НЕШТАТНОЙ ситуации с PHY. Вместо этого Вы добавили те самые ненужные действия требующие времени и для случая штатной инициализации. Затраты времени меня особо не смущают, Естественно - какие затраты времени, если у вас _всегда_ до чтения регистра задержка 1 мс а у меня ее нет, в ее качестве посылки сброса по всем адресам. Цитата но порожден еще и тот самый говнокод ( делающий что-то зачем-то )  . ликвидирующий задержку в 3,5 сек в случае внештатной ситуации и не вносящий никаких задержек и усложнений и без того кривого кода. Вообще достаточно было читать PHYID без всяких левых сбросов и задержек.
|
|
|
|
|
Jul 5 2011, 23:22
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (aaarrr @ Jul 6 2011, 01:46)  Вот заодно и спрошу: зачем сброс? Вопрос без всякой подковырки, просто интересно. Для порядка, дабы функция инициализации всегда делала все возможное включая инициализацию PHY и после софтового сброса контроллера, если нет аппаратного сброса. Но прежде всего это ведь тест на наличие любого PHY - бит должен самосброситься по окончанию инициализации PHY. Другое дело, что время ожидания очистки в 128ms скорее всего великовато, но с другой стороны оно обычно никак не нормируется производителем PHY  . Далее еще, после чтения идентификатора, но перед инициализацией, производятся чтения default значений из регистров PHY. Это тоже диагностика PHY. Порядка 10 лет работы в качестве разработчика диагностических комплексов на VEF-е оставили хорошую привычку, в том числе при POST, делать всю диагностику по максимуму. QUOTE (sasamy @ Jul 6 2011, 01:58)  ...достаточно открыть любой даташит. Открыть, почитать, подумать...., допустить мысль, что кто-то тоже обладает разумом. Только очевидно это не всем дано - лучше сразу писать первое, что придет в голову  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 7 2011, 06:34
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Не про RMII KS8721BL, зато про Olimex/Startetkit LPC23/4. Кто-нибудь переопределял приоритеты на шине AHB1? При записи на sd-карточку начинает срываться изображение на TFT. Работа с sd через DMA - кейловский драйвер (MCI_LPC24xx.c). И DMA и LCD подключены к AHB1. В регистре AHBCFG1 настроил приоритеты так - LCD, CPU, DMA, AHB1, USB. После чего в процедуре записи на SD-карту вылетаю в Data-Abort. Если приоритет DMA выше LCD - то все хорошо, но изображение срывается. Проблему решил уменьшением частоты тактирования LCD, но если кто вдруг в курсе настройки AHB1 буду признателен совету.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Jul 8 2011, 07:07
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(aaarrr @ Jul 7 2011, 14:22)  В этом случае следовало бы разобраться, что именно вызывает Data Abort при работе с SD. В Data Abort вылетает в функции fwrite - кейловская библиотека Flash File System. Исходников нет, дизассемблирование показывает, что проблемная инструкция STR R0, [R4, #0x0C], в R4 нули. Получается пытается что-то сохранить по адресу в памяти программ... В общем или таки кейловская библиотека чудит, или я не знаю тонкостей настройки приоритетов AHB.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Aug 10 2011, 06:07
|
Группа: Новичок
Сообщений: 1
Регистрация: 30-09-10
Пользователь №: 59 841

|
Цитата(Lotor @ Jul 7 2011, 12:34)  Не про RMII KS8721BL, зато про Olimex/Startetkit LPC23/4. Кто-нибудь переопределял приоритеты на шине AHB1? При записи на sd-карточку начинает срываться изображение на TFT. Работа с sd через DMA - кейловский драйвер (MCI_LPC24xx.c). И DMA и LCD подключены к AHB1. В регистре AHBCFG1 настроил приоритеты так - LCD, CPU, DMA, AHB1, USB. После чего в процедуре записи на SD-карту вылетаю в Data-Abort. Если приоритет DMA выше LCD - то все хорошо, но изображение срывается. Проблему решил уменьшением частоты тактирования LCD, но если кто вдруг в курсе настройки AHB1 буду признателен совету.  Тоже много времени потратил на то, чтобы разобраться с приоритетами DMA и LCD. В итоге где-то на иностранном форуме раздобыл следующую настройку приоритетов: AHBCFG1 = 0x10000144; До этого тоже изображение дёргалось при использовании DMA. Сейчас всё идеально ) SD не использую, так что не смогу подсказать, как тут быть. Но думаю, что это поможет тем, кто также не использует SD.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|