Jump to content

    

Wiznet 5500 не отвечает

Добрый день! 
Имеется модуль Ethernet W5500, управляю им с ПЛИС. Хочу считать состояния регистров по SPI, но модуль молчит(
Например, пытаюсь считать RTR-регистр по адресу 0x001A, где по умолчанию должно быть значение D0. Перед тем как отправлять, делаю сброс через ногу, выведенную на разъем. Ниже прикрепляю диаграмму (синий - МOSI, желтый - SCLK, розовый - SCS, зеленый - MISO).
Подскажите, что я делаю не так? 

DSC07384.jpg

Share this post


Link to post
Share on other sites

Напишите по человечески что вы передаёте.

По идее должно быть адрес 2 байта, комманда 1, пустое место под данные 1байт. У вас на месте для данных какие то значения.

Вот как это делает фирменный драйвер:

#define _W5500_IO_BASE_              0x00000000
#define WIZCHIP_CREG_BLOCK          0x00     //< Common register block

#define RTR                (_W5500_IO_BASE_ + (0x0019 << 8) + (WIZCHIP_CREG_BLOCK << 3))

Т.е. RTR =0x 19 00

#define getRTR() \
        ((WIZCHIP_READ(RTR) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(RTR,1)))

Т.е. 0x 19 00 00

Может конечно я чего то не догоняю но драйвер вроде делает так.

 

Share this post


Link to post
Share on other sites

Никогда эту штуку не использовал.

Просто пробежал по datasheetу.

Пишут что W5500 поддерживает два режима SPI 0 и 3, в обоих случаях данные линий фиксируются по положительному фронту CLK.

Т.е. меняться данные должны по отрицательному.

На осциллограмме вижу что одновременно с первым передним фронтом CLK меняется и MOSI.

Share this post


Link to post
Share on other sites

 

 

11 hours ago, MegaVolt said:

Напишите по человечески что вы передаёте.

По идее должно быть адрес 2 байта, комманда 1, пустое место под данные 1байт. У вас на месте для данных какие то значения.

Вот как это делает фирменный драйвер:

#define _W5500_IO_BASE_              0x00000000
#define WIZCHIP_CREG_BLOCK          0x00     //< Common register block

#define RTR                (_W5500_IO_BASE_ + (0x0019 << 8) + (WIZCHIP_CREG_BLOCK << 3))

Т.е. RTR =0x 19 00

#define getRTR() \
        ((WIZCHIP_READ(RTR) << 8) + WIZCHIP_READ(WIZCHIP_OFFSET_INC(RTR,1)))

Т.е. 0x 19 00 00

Может конечно я чего то не догоняю но драйвер вроде делает так.

 

Прикрепляю фото с нулевыми данными. Передаю значение 00000000_00011010_00000001_00000000, где биты

[31:16] - это адрес считываемого регистра,

[15:8] - контрольный байт:
-  нули в [15:11] означают, что обращаемся к общему регистру (есть ещё регистры для настройки каждого сокета)
- "0" в бите [10] означает, что режим "чтение"  
- "01" в [9:8] означает что в кадре только 1 байт данных ("Fixed Data Length Mode , 1 Byte Data Length (N = 1)")

[7:0] - байт данных в режиме записи.

DSC07386.jpg

 

Edited by Faton_11

Share this post


Link to post
Share on other sites
3 минуты назад, Faton_11 сказал:

Прикрепляю фото с нулевыми данными. Передаю значение 00000000_00011010_00000001_00000000, где биты

Вам же уже сказали что у Вас защёлкиваются левые данные по первому клоку. Неужто не видите?  :unknw:

Share this post


Link to post
Share on other sites
2 hours ago, zombi said:

Никогда эту штуку не использовал.

Просто пробежал по datasheetу.

Пишут что W5500 поддерживает два режима SPI 0 и 3, в обоих случаях данные линий фиксируются по положительному фронту CLK.

Т.е. меняться данные должны по отрицательному.

На осциллограмме вижу что одновременно с первым передним фронтом CLK меняется и MOSI.

с задним фронтом же меняется. извиняюсь за качество фото: камера не очень. но если и по спаду защелкивать, то снова ничего( 

DSC07385.jpg

Share this post


Link to post
Share on other sites
2 минуты назад, Faton_11 сказал:

с задним фронтом же меняется. извиняюсь за качество фото: камера не очень. но если и по спаду защелкивать, то снова ничего( 

А разве чип это умеет?? Вы уверены? Никогда не встречал чипов умеющих защёлкивать или по фронту или по спаду. Обычно - или то или другое.

И как вы этого добиваетесь (выбора чем защёлкивать)?

Share this post


Link to post
Share on other sites
21 minutes ago, jcxz said:

А разве чип это умеет?? Вы уверены? Никогда не встречал чипов умеющих защёлкивать или по фронту или по спаду. Обычно - или то или другое.

И как вы этого добиваетесь (выбора чем защёлкивать)?

в 1м бите косяк, теперь вижу. но теперь-то что  неправильно, все равно не понимаю 

DSC07387.jpg

Share this post


Link to post
Share on other sites
1 hour ago, Faton_11 said:

 - "01" в [9:8] означает что в кадре только 1 байт данных ("Fixed Data Length Mode , 1 Byte Data Length (N = 1)")

попробуйте "00" вместо "01" поскольку всё равно используете управление SCSn

19 hours ago, Faton_11 said:

Перед тем как отправлять, делаю сброс через ногу, выведенную на разъем.

длительность импульса сброса >= 500 us ?

после сброса делаете паузу >= 1 ms ?

Share this post


Link to post
Share on other sites
On 10/2/2019 at 1:40 PM, MegaVolt said:

Моё сообщение проигнорировали?

Вам ведь ответ был самому первому) а знание того, что фирменный драйвер делает, для  меня ясности не очень добавило( 

On 10/2/2019 at 2:08 PM, zombi said:

попробуйте "00" вместо "01" поскольку всё равно используете управление SCSn

длительность импульса сброса >= 500 us ?

после сброса делаете паузу >= 1 ms ?

в общем, Вы были правы. Это все кривой сброс, теперь, кажется, отвечает. Спасибо! =)

и спасибо всем за ответы!=) 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now