Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RTL8316(RTL8326) <->I2C<->uCU
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
prottoss
Все привет и с праздниками. Собственно сабж. Если кто нибудь делал такую связку, буду рад помощи.
Пока что свитч ни как не реагирует на запросы от МК. Внешней ЕЕПРОМ нету.
Rst7
У меня, к сожалению, конкретно до 16ти...24хпортовых RTL руки не дошли, так что могу посоветовать предположительное направление плясок...

Вы ж в курсе, что после сброса RTL сначала вычитывает (ну или пытается вычитывать) данные из EEPROM, а только потом переходит в режим Serial-CPU Access? Посмотрите осциллографом как быстро это происходит. По даташиту - ~10мс чтение епрома, ~24мс - тест ОЗУ, потом инициализация ОЗУ (неизвестно сколько), потом инициализация внутренних регистров и только потом готовность к обмену по I2C.

Кстати, еще может быть неприятный вариант, что надо будет ставить или эмулировать EEPROM, потому как без нее может не инициализироваться дальнейший обмен по I2C - врать не буду, но где-то такой глюк был wink.gif

ЗЫ Кстати, а не очередной ли полууправляемый свич для пионернетов Вы задумали? Вообще-то, я бы обратил свое внимание на IP1726 (ну или, может, что-то есть более свежее) - там Spanning tree пакеты не летят сквозь свич, а могут быть оттранслированны на CPU-порт для обработки. Т.е. на IP1726 можно реализовать Spanning Tree, а на RTL - нет. А это очень полезно.
prottoss
Цитата(Rst7 @ Jan 7 2009, 15:19) *
Вы ж в курсе, что после сброса RTL сначала вычитывает (ну или пытается вычитывать) данные из EEPROM, а только потом переходит в режим Serial-CPU Access? Посмотрите осциллографом как быстро это происходит. По даташиту - ~10мс чтение епрома, ~24мс - тест ОЗУ, потом инициализация ОЗУ (неизвестно сколько), потом инициализация внутренних регистров и только потом готовность к обмену по I2C.
Да, в курсе. Даташит весь прокурил. Вчера у меня был первый наскок на этот чип.
Цитата(Rst7 @ Jan 7 2009, 15:19) *
Кстати, еще может быть неприятный вариант, что надо будет ставить или эмулировать EEPROM, потому как без нее может не инициализироваться дальнейший обмен по I2C - врать не буду, но где-то такой глюк был wink.gif
Я уже тоже к этому склоняюсь. Сегодня попробую залить ЕЕПРОМ и попробовать еще раз потыкаться.
Цитата(Rst7 @ Jan 7 2009, 15:19) *
ЗЫ Кстати, а не очередной ли полууправляемый свич для пионернетов Вы задумали? Вообще-то, я бы обратил свое внимание на IP1726 (ну или, может, что-то есть более свежее) - там Spanning tree пакеты не летят сквозь свич, а могут быть оттранслированны на CPU-порт для обработки. Т.е. на IP1726 можно реализовать Spanning Tree, а на RTL - нет. А это очень полезно.
Задумал, но только не яsmile.gif Это заказ - сделать мониторинг такого чипа по SNMP.
Rst7
Цитата
Это заказ - сделать мониторинг такого чипа по SNMP.


Вот прям так и сформулировали? А по RRCP стыдно забрать состояния?

Цитата
Сегодня попробую залить ЕЕПРОМ и попробовать еще раз потыкаться.


Может пригодится генератор прошивок. Накопан где-то на просторах толи инета, толи в закромах nag.ru
Нажмите для просмотра прикрепленного файла
prottoss
Цитата(Rst7 @ Jan 7 2009, 16:04) *
Вот прям так и сформулировали? А по RRCP стыдно забрать состояния?
RRCP работает только в пределах одного сегмента сети и секюрити в нем нет никакого.
Rst7
Цитата
RRCP работает только в пределах одного сегмента сети и секюрити в нем нет никакого.


О, таки пионернет smile.gif Только там цепляют гирлянды неуправляемых свичей и при этом хотят задешево контролировать состояние железяк.

Я вот к чему про RRCP разговор завел. Врядли Вы будете целиком разрабатывать и изготавливать такой свич. Скорее всего - это будет китайский донор с прикрученной своей железякой. А тут оптимально минимум вмешательства в схему свича.

Тогда я бы поступил так. В свич впаивается EEPROM - обычно, на плате место есть. Т.е. минимум гемора. В прошивке разрешается RRCP только на один порт, в который втыкается Ваш девайс, являющийся мостом RRCP-SNMP. Кстати, не забываем реализовывать полноценный SNMPv3, раз уж так секурности хотят smile.gif

Гм... Написал - аж самому понравилось. Надо поговорить с товарищем-сетевиком, не нужна ли ему такая приблуда, задешево wink.gif
prottoss
Цитата(Rst7 @ Jan 7 2009, 17:28) *
О, таки пионернет smile.gif Только там цепляют гирлянды неуправляемых свичей и при этом хотят задешево контролировать состояние железяк.
Я вот к чему про RRCP разговор завел. Врядли Вы будете целиком разрабатывать и изготавливать такой свич. Скорее всего - это будет китайский донор с прикрученной своей железякой. А тут оптимально минимум вмешательства в схему свича.
Тогда я бы поступил так. В свич впаивается EEPROM - обычно, на плате место есть. Т.е. минимум гемора. В прошивке разрешается RRCP только на один порт, в который втыкается Ваш девайс, являющийся мостом RRCP-SNMP. Кстати, не забываем реализовывать полноценный SNMPv3, раз уж так секурности хотят smile.gif
Гм... Написал - аж самому понравилось. Надо поговорить с товарищем-сетевиком, не нужна ли ему такая приблуда, задешево wink.gif
Я ничего изготавливать не собираюсьsmile.gif Мне предложили написать ПО для такой штуки. Заказчики тоже ничего изготавливать не собираются, по крайней мере сейчас. Пока нужно лишь сделать управление к существующему оборудованию. SNMP у меня есть. Мой собственный самописный. Испытан на ARM SAM7X и AVR ATmega128 (без внешней памяти).


Я думаю им виднее, как реализовывать девайс, раз они с этим общаются, бо вроде не дураки. А мое дело маленькоеsmile.gif
Rst7
Цитата
SNMP у меня есть.


v>=2? Или по-простому, v1 и все?
prottoss
Цитата(Rst7 @ Jan 7 2009, 18:53) *
v>=2? Или по-простому, v1 и все?
Все версии
Rst7
Цитата(prottoss @ Jan 7 2009, 14:37) *
Все версии

Отлично. В этом случае Ваша совесть чиста.

PS Получается коннект с камнем?
prottoss
Цитата(Rst7 @ Jan 7 2009, 19:47) *
Отлично. В этом случае Ваша совесть чиста. PS Получается коннект с камнем?
Спасибо за вопрос по темеsmile.gif Пока нет.
Rst7
Цитата
Спасибо за вопрос по теме


Ну надо же поддержать беседу smile.gif

С другой стороны, не задай Вы вопрос про I2C, мне бы, может быть, и не пришла бы в голову идея моста RRCP<->Чтото_вменяемое. Из чужого вопроса надо же и отвечающему извлекать какую-нибудь пользу. Так что лично я попробую немного денег заработать на продаже таких мостов пионернетам. Благо, подходящая дешевая железяка как раз мною мелкосерийно производится. Добавить в нее такой функционал - как 2 пальца.
prottoss
Цитата(Rst7 @ Jan 8 2009, 00:02) *
Ну надо же поддержать беседу smile.gif
С другой стороны, не задай Вы вопрос про I2C, мне бы, может быть, и не пришла бы в голову идея моста RRCP<->Чтото_вменяемое. Из чужого вопроса надо же и отвечающему извлекать какую-нибудь пользу. Так что лично я попробую немного денег заработать на продаже таких мостов пионернетам. Благо, подходящая дешевая железяка как раз мною мелкосерийно производится. Добавить в нее такой функционал - как 2 пальца.
Ага, прикольноsmile.gif Кстати, задал заказчикам вопрос, сначала обокакали RRCP но потом почесали затылки - думают... связи с чипом по I2C по прежнему не устанавливается. Хоть и подсунул ему прошитую EEPROM, которую он прочитал.
Rst7
Цитата
связи с чипом по I2C по прежнему не устанавливается.


А на осциллограммах пакетов от камня в RTL ничего криминального не видно? Все подтяжки на месте?

Цитата
но потом почесали затылки - думают...


А то. Идея знатная. Особенно, когда она объединяется сразу с пинговалкой и ребутером этого свича. Вполне полезный функционал за $20. Щас мои заказчики и трейдеры от праздников отойдут (заказчики - для уточнения, почем брать будут, трейдеры - для покупки какого-нибудь пациента на RTL8316/26 для тестов) и приступлю.

Несколько рекомендаций на будущее, когда связь поднимете и приступите собственно к основному этапу:

а) Не забудьте в свой стек вставить стрип vlan-тегов. А то можно случайно управление потерять, если тегированные пакеты полетят на порт Вашей железяки. Такая ситуация легко может случиться при некорректной конфигурации свича.

б) Лично я бы блокировал возможность отключения порта, в котором будет сидеть Ваша железяка, через управление. Правда, для этого прийдется парсить данные для посылки в RTL прямо на железке, но это требует только аккуратности в написании кода, никаких суперхитростей тут нет.
prottoss
Цитата(Rst7 @ Jan 8 2009, 00:53) *
А на осциллограммах пакетов от камня в RTL ничего криминального не видно? Все подтяжки на месте?
Все на месте. Чип просто не откликается.
Цитата(Rst7 @ Jan 8 2009, 00:53) *
Несколько рекомендаций
Спасибо, учту
Rst7
Цитата
Все на месте. Чип просто не откликается.


Т.е. даже на байт адреса (самый первый после START) нет ACK?
prottoss
Цитата(Rst7 @ Jan 8 2009, 01:16) *
Т.е. даже на байт адреса (самый первый после START) нет ACK?
Нет
prottoss
Так и не могу достучаться до железяки. В данный момент есть две тестовые платы с МК AVR ATmega128 на борту, через которые хочу произвести связь со свитчем. На одной плате имеется датчик температуры DS1621, который опрашивается периодически с интервалом в 2 секунды. Кроме того, есть связь с микросхемами EEPROM 24LC04 установленными на платах свитчей. Сами свитчи опрашиваются в цикле с интервалом в 1 секунду. Прочитал в даташите на RTL8316B и RTL8326, что на линии SDA уже есть встроенный в чип резистор подтяжки. Пробовал и отпаивать все резисторы, и ставить на одну линию, и на вторую и на обе. Менял номиналы, частоту шины...
Связаться ни как не получаетсяsad.gif Идей новых пока ни каких на ум не приходит.
Привожу ниже код чтения свитча:
Код
...
#define TWI_READ        0x01    /* Data transfer direction READ */
...
#define RTL83X6_I2C_ADDR                0xA8
...
BOOL RTL83x6_Read(UINT16 addr, P_UINT16 pdata)
{    
      UINT8 lo, hi;
    INT i = 100;
      
    while(--i)
    {
        while(1)
        {      
            if(FALSE == TWI_Start() ||
               FALSE == TWI_Addr(RTL83X6_I2C_ADDR | TWI_READ) ||
               FALSE == TWI_Put(LOBYTE(addr)) ||
               FALSE == TWI_Put(HIBYTE(addr)) ||
               FALSE == TWI_Get(&lo, TRUE) ||
               FALSE == TWI_Get(&hi, TRUE))
                break;
            TWI_Stop();
            TC0_DelayMS(2);
            
            *pdata = MAKEUINT16(hi, lo);
            return TRUE;
        }
        TWI_Reset();
        TC0_DelayMS(5);
    }
      return FALSE;
}
prottoss
Цитата(prottoss @ Jan 8 2009, 20:56) *
Так и не могу достучаться до железяки...
Так и достучалсяsmile.gif Правда, I2C пришлось делать софтовый, потому как в данных чипах он не совсем такой как надоsmile.gif Во избежание пропадания охоты у Rst7 использовать RRCP оставлю секрет не раскрытым.
Rst7
Цитата
Во избежание пропадания охоты у Rst7 использовать RRCP оставлю секрет не раскрытым


Уже не отобъете. Я уже сделал мост RRCP<->HTTP smile.gif Потому как мне проще доработать любой серийный свич путем запайки одной епромки на предусмотренное место и больше никаких проводов. Так что можете расказывать.
prottoss
Цитата(Rst7 @ Jan 18 2009, 19:28) *
Уже не отобъете. Я уже сделал мост RRCP<->HTTP smile.gif Потому как мне проще доработать любой серийный свич путем запайки одной епромки на предусмотренное место и больше никаких проводов. Так что можете расказывать.
Да, здесь проводов больше. 2 на i2C, 2 питание, 4 собственно сеть. За то на много больше возможностей и нет глюков. Все регистры как на ладони...
Все равно не расскажуsmile.gif После секса с RTL8316B - это - святоеsmile.gif
xend
Реально кому-нибудь удалось прочитать регистры rtl8316b по i2c ?
prottoss
Цитата(xend @ May 12 2009, 06:20) *
Реально кому-нибудь удалось прочитать регистры rtl8316b по i2c ?
Да, давно уже все прочитаноsmile.gif
Rst7
Цитата
Да, давно уже все прочитано


А у меня - RRCP smile.gif - http://cbsie.dyndns.info/WWW/rrcp.html

Кстати, а в чем грабли, в двух словах? Вроде глянул на драйвер, кроме пляски под названием SW_Reset никакого криминала не видать, I2C в чистом виде... Или я что-то пропустил?
Itch
Поделюсь идеями по поводу I2C.
1. После STOP надо обязательно дернуть клок SCL 1 раз вниз-вверх при SDA=1. Иначе RTL отвечает только на первый запрос, все последущие он игнорирует.
2. При записи регистра последний NACK от RTL лучше не контролировать, т.к. при этом процент успешных записей гораздо выше.
3. Возможно это ошибки в разводке платы, но регистры записываются и читаются не гарантированно. После записи лучше прочитать содержимое, давать несколько попыток на успешную запись.
Так и не понял от чего это зависит, менял и задержки и тактовую частоту - примерно одна и та же картина, около 20% ошибок доступа.

В исходниках protoss кажется есть ошибка - в функции SW_Put, SDA ставится в 0 и потом читается ACK с шины, естественно он всегда будет 0:
Код
/* Get ACK(NACK) */
    ClrSDA();
    Delay();
    SetSCL();
    Delay();
    i = RTL83X6_PIN & RTL83X6_SDA;
    ClrSCL();
    Delay();
    return i;

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.