Jump to content

    
Sign in to follow this  
toweroff

USB хаб на плате -- сброс

Recommended Posts

5 minutes ago, BaN said:

Когда в /sys/class/gpio/gpio88/value записываете 1 - RESET_N устанавливается в 0, когда записываете 0 - устанавливается в 1.

В /sys/class/gpio../value пишется как есть - не знает ничего gpio о чужих настройках в device tree.

Share this post


Link to post
Share on other sites

Понятно, такие подробности уже легко не вспоминаются.

Тогда единственная мысль, которая остается - непропаянный или сгоревший пин SMBDATA.

Share this post


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

Резистор снимите и проверьте диоды на пине - проще будет.

На каком пине конкретно? Пока не видел диссонанса никакого. I2C анализатором (DSLogic) работала как надо, осциллом тоже не заметил ничего. Снимал/ставил назад резисторы тоже
 

Share this post


Link to post
Share on other sites
2 часа назад, toweroff сказал:

1832472462_.thumb.png.159a954071312ceacc1fc63527a51523.png

как показал... Нулёвки вполне себе нулёвки, звонятся, как и должны
поменять кролика что ли...

пропаял, эффекта ноль

 

да и пин-то сброса ведь _ДОЛЖЕН_ дёрнуться вверх, гадюко(

 

Share this post


Link to post
Share on other sites
14 minutes ago, toweroff said:

Нулёвки вполне себе нулёвки, звонятся, как и должны

А пин? Смысл идеи был в том, чтобы снять резистор и измерить падение диодов GND->SMBDATA и/или SMBDATA->VCC.

Share this post


Link to post
Share on other sites
20 minutes ago, toweroff said:

да и пин-то сброса ведь _ДОЛЖЕН_ дёрнуться вверх, гадюко(

Может я понял неправильно, но вы же писали, что на пине RESET_N нормально выводится напряжение 0 и 1 (2мВ и 3.31в)?

4 hours ago, toweroff said:

Дальше интереснее... Если я пин сброса экспортирую, записываю туда 0, 1 - все нормально, вижу 2мВ и 3.31в
При этом хаб на шине USB не вижу... На I2C тоже не вижу

Или это про пин сброса uSD карты говорили? Тогда у вас сигнал ресета GPIO2.24 не работает? Может тогда дело не в пине SMBDATA хаба, а в пине GPIO2.24 процессора.

Посмотрел драйвер, он сам этот пин дергает, сам себя запутал.

static void usb251xb_reset(struct usb251xb *hub)
{
	if (!hub->gpio_reset)
		return;

	i2c_lock_bus(hub->i2c->adapter, I2C_LOCK_SEGMENT);

	gpiod_set_value_cansleep(hub->gpio_reset, 1);
	usleep_range(1, 10);	/* >=1us RESET_N asserted */
	gpiod_set_value_cansleep(hub->gpio_reset, 0);

	/* wait for hub recovery/stabilization */
	usleep_range(500, 750);	/* >=500us after RESET_N deasserted */

	i2c_unlock_bus(hub->i2c->adapter, I2C_LOCK_SEGMENT);
}

Я так понял, что если пин настроен как у вас:

                reset-gpios = <&gpio2 24 GPIO_ACTIVE_LOW>;

То всё нормально должно выводиться на пин с инверсией.

Edited by BaN

Share this post


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

Может я понял неправильно, но вы же писали, что на пине RESET_N нормально выводится напряжение 0 и 1 (2мВ и 3.31в)?

 

Или это про пин сброса uSD карты говорили? Тогда у вас сигнал ресета GPIO2.24 не работает? Может тогда дело не в пине SMBDATA хаба, а в пине GPIO2.24 процессора.

 

на сбросе хаба - да, такие уровни. Я их создаю сам через экспорт пина и записью в порт
детект uSD - я о том, что драйвер захватил и видит этот пин и видит его
различия очевидны, как мне кажется

Share this post


Link to post
Share on other sites

Странное дело тогда, конечно, если драйвер usb251xb держит ресет на нуле. Могу только предложить скомпилировать тестовый драйвер, чтобы проверить сам функционал вывода на пин ресет - раз в секунду выводить на пин инвертированное состояние пина, например.

Share this post


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

Странное дело тогда, конечно, если драйвер usb251xb держит ресет на нуле. Могу только предложить скомпилировать тестовый драйвер, чтобы проверить сам функционал вывода на пин ресет - раз в секунду выводить на пин инвертированное состояние пина, например.

Я ценю желание помочь мне, правда. Но я и делал это сам, и симулировал сброс экспортом пина и записью в него.

Share this post


Link to post
Share on other sites
1 minute ago, toweroff said:

Но я и делал это сам

Именно из модуля ядра через функции devm_gpiod_get_optional / gpiod_set_value_cansleep, а не в юзерспейсе экспортом?

Share this post


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

Именно из модуля ядра через функции devm_gpiod_get_optional / gpiod_set_value_cansleep, а не в юзерспейсе экспортом?

где-то рядом в теме я указывал, что я -- ненастоящий сварщик
подробнее, пожалуйста)

Share this post


Link to post
Share on other sites
Just now, toweroff said:

где-то рядом в теме я указывал, что я -- ненастоящий сварщик
подробнее, пожалуйста)

Вот код самого драйвера:

https://github.com/torvalds/linux/blob/master/drivers/usb/misc/usb251xb.c

Там сначала получается дескриптор пина сброса:

	hub->gpio_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
	if (PTR_ERR(hub->gpio_reset) == -EPROBE_DEFER) {
		return -EPROBE_DEFER;
	} else if (IS_ERR(hub->gpio_reset)) {
		err = PTR_ERR(hub->gpio_reset);
		dev_err(dev, "unable to request GPIO reset pin (%d)\n", err);
		return err;
	}

И затем этот дескриптор используется для чтения/записи пина:

static void usb251xb_reset(struct usb251xb *hub)
{
	if (!hub->gpio_reset)
		return;

	i2c_lock_bus(hub->i2c->adapter, I2C_LOCK_SEGMENT);

	gpiod_set_value_cansleep(hub->gpio_reset, 1);
	usleep_range(1, 10);	/* >=1us RESET_N asserted */
	gpiod_set_value_cansleep(hub->gpio_reset, 0);

	/* wait for hub recovery/stabilization */
	usleep_range(500, 750);	/* >=500us after RESET_N deasserted */

	i2c_unlock_bus(hub->i2c->adapter, I2C_LOCK_SEGMENT);
}

Возможно, управление пином в юзерспейсе через /sys/class/gpio/export итд и управление пином в драйвере даст разный результат. И в первом случае будет работать, а во втором - нет.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this