Faton_11 0 1 октября, 2019 Опубликовано 1 октября, 2019 · Жалоба Добрый день! Имеется модуль Ethernet W5500, управляю им с ПЛИС. Хочу считать состояния регистров по SPI, но модуль молчит( Например, пытаюсь считать RTR-регистр по адресу 0x001A, где по умолчанию должно быть значение D0. Перед тем как отправлять, делаю сброс через ногу, выведенную на разъем. Ниже прикрепляю диаграмму (синий - МOSI, желтый - SCLK, розовый - SCS, зеленый - MISO). Подскажите, что я делаю не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 1 октября, 2019 Опубликовано 1 октября, 2019 · Жалоба Напишите по человечески что вы передаёте. По идее должно быть адрес 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 Может конечно я чего то не догоняю но драйвер вроде делает так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба Никогда эту штуку не использовал. Просто пробежал по datasheetу. Пишут что W5500 поддерживает два режима SPI 0 и 3, в обоих случаях данные линий фиксируются по положительному фронту CLK. Т.е. меняться данные должны по отрицательному. На осциллограмме вижу что одновременно с первым передним фронтом CLK меняется и MOSI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faton_11 0 2 октября, 2019 Опубликовано 2 октября, 2019 (изменено) · Жалоба 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] - байт данных в режиме записи. Изменено 2 октября, 2019 пользователем Faton_11 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 3 минуты назад, Faton_11 сказал: Прикрепляю фото с нулевыми данными. Передаю значение 00000000_00011010_00000001_00000000, где биты Вам же уже сказали что у Вас защёлкиваются левые данные по первому клоку. Неужто не видите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faton_11 0 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 2 hours ago, zombi said: Никогда эту штуку не использовал. Просто пробежал по datasheetу. Пишут что W5500 поддерживает два режима SPI 0 и 3, в обоих случаях данные линий фиксируются по положительному фронту CLK. Т.е. меняться данные должны по отрицательному. На осциллограмме вижу что одновременно с первым передним фронтом CLK меняется и MOSI. с задним фронтом же меняется. извиняюсь за качество фото: камера не очень. но если и по спаду защелкивать, то снова ничего( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 2 минуты назад, Faton_11 сказал: с задним фронтом же меняется. извиняюсь за качество фото: камера не очень. но если и по спаду защелкивать, то снова ничего( А разве чип это умеет?? Вы уверены? Никогда не встречал чипов умеющих защёлкивать или по фронту или по спаду. Обычно - или то или другое. И как вы этого добиваетесь (выбора чем защёлкивать)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faton_11 0 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 21 minutes ago, jcxz said: А разве чип это умеет?? Вы уверены? Никогда не встречал чипов умеющих защёлкивать или по фронту или по спаду. Обычно - или то или другое. И как вы этого добиваетесь (выбора чем защёлкивать)? в 1м бите косяк, теперь вижу. но теперь-то что неправильно, все равно не понимаю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба Моё сообщение проигнорировали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 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 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faton_11 0 4 октября, 2019 Опубликовано 4 октября, 2019 · Жалоба 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 ? в общем, Вы были правы. Это все кривой сброс, теперь, кажется, отвечает. Спасибо! =) и спасибо всем за ответы!=) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться