1

Temat: I2C w MT300N V2

Próbuję uruchomić i2c w routerze MT300N V2.

https://docs.gl-inet.com/en/2/hardware/mt300n-v2/

Wg schematu wolne są GPIO 4 i 5.

Skompilowałem wersję 18.06.1 z wbudowanym kmod-i2c-core i kmod-i2c-gpio-custom.
Dodałem plik /etc/modules.d/i2c-gpio-custom, w środku i2c-gpio-custom bus0=0,5,4

W urządzeniu jest /dev/i2c-0
W dmesgu jest wpis i2c-gpio i2c-gpio.0: using pins 5(SDA) and 4 (SCL)

W /sys/kernel/debug/gpio są widoczne gpio-4 i gpio-5 jako scl i sda jako in ze stanem hi.

W /sys/bus/gpio/devices nie ma gpio4 ani gpio5.

i2cdetect działa, ale nic nie znajduje.
Podłączyłem analizator stanów logicznych pod GPIO. Podczas uruchamiania i2cdetect nic się nie dzieje na tych liniach.

Co może być nie tak, co można jeszcze sprawdzić?

2

Odp: I2C w MT300N V2

Najpierw sprawdź czy jak je sobie wyeksportujesz to możesz je ręcznie kontrolować.
Jak nie, to pewnie trzeba w DTS zmienić ich funkcję na GPIO (mogą być domyślnie ustawione do czegoś innego).

3

Odp: I2C w MT300N V2

Przynajmniej tak piszą tutaj: https://forum.gl-inet.com/t/mt300n-how- … art/3154/2

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

4 (edytowany przez tymmej 2018-10-04 10:50:28)

Odp: I2C w MT300N V2

Po usunięciu modułów, weksportowaniu, zmiany kierunku niezależnie od value jest stan wysoki.

Jest jeszcze coś takiego jak kmod-i2c-mt7628.

W target/linux/ramips/dts/mt7628an.dtsi jest
297
298                 i2c_pins: i2c {
299                         i2c {
300                                 ralink,group = "i2c";
301                                 ralink,function = "i2c";
302                         };
303                 };

Mogę dodać (tak jak w https://forum.gl-inet.com/t/mt300n-how- … rt/3154/2)
&i2c {
    status = "okay";
};
do target/linux/ramips/dts/GL-MT300N-V2.dts i korzystać z tego sterownika zamiast kmod-i2c-gpio-custom?

Jak uzyskać dostęp do GPIO 45 i 46? (Chciałbym jeszcze jeden pin dla 1wire)
Usunąć
138 &uart1 {
139         status = "okay";
140 };
z target/linux/ramips/dts/GL-MT300N-V2.dts
i dodać
uart1
do
ralink,group = "wdt", "gpio", "wled_an", "p0led_an", "p1led_an", "i2s";
ralink,function = "gpio";
w tym samym pliku?

5

Odp: I2C w MT300N V2

Odnośnie i2c:
zrobiłem jak napisałem i działa.

Czy konieczne jest robienie
echo ds1307 0x68 > /sys/bus/i2c/devices/i2c-0/new_device
aby i2cdetect pokazywało urządzenie?

Bez tego nie pokazuje, po tym wyświetla się jako UU w i2cdetect.
hwclock działa.

6

Odp: I2C w MT300N V2

1wire na pinie 45 również udało się uruchomić, tak jak opisałem.

7 (edytowany przez tymmej 2018-10-04 17:06:52)

Odp: I2C w MT300N V2

Jednak mam problem.

Nie potrafię ustawić czasu podczas startu systemu.

Dopisałem

(echo ds1307 0x68 > /sys/bus/i2c/devices/i2c-0/new_device) > /tmp/rtclog 2>&1
i2cdetect -y 0 >> /tmp/rtclog 2>&1

do /etc/init.d/sysfixtime na początku boot().

Zawartość /tmp/rtclog:

/etc/rc.common: line 151: can't create /sys/bus/i2c/devices/i2c-0/new_device: nonexistent directory
i2cdetect: can't open '/dev/i2c/0': No such file or directory

Z tego co rozumiem to nie mam jeszcze magistrali i2c.

Uruchamiając normalnie z konsoli działa:

/home/tymmej # hwclock -r
hwclock: can't open '/dev/misc/rtc': No such file or directory
/home/tymmej # echo ds1307 0x68 > /sys/bus/i2c/devices/i2c-0/new_device
/home/tymmej # hwclock -r
Wed Oct  3 20:53:36 2018  0.000000 seconds

Dopisanie do /etc/rc.local nie pomaga, dodanie sleep 5 na początku rc.local również nie.
Dowiązanie 59-i2c-mt7628 do /etc/modules-boot.d/ z /etc/modules.d też nie pomaga.

Czy można coś z tym zrobić?

8

Odp: I2C w MT300N V2

Zrób to później np. w /etc/rc.local

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: I2C w MT300N V2

Teraz rzeczywiście zadziałało.
Jestem przekonany, że próbowałem to. Pewnie źle spojrzałem na coś.

10

Odp: I2C w MT300N V2

Chyba nikt się nie mylił.
Jak nie ma internetu to rc.local jest wołanie po ok. 3 minutach. Jak sprawdzałem za pierwszym razem to było przed wywołaniem, teraz po.

Znalazłem lepsze miejsce: /etc/init.d/boot
Wtedy zegar jest ustawiany wcześnie.

11

Odp: I2C w MT300N V2

Dodaj to sobie do DTS:
https://github.com/torvalds/linux/blob/ … ds1307.txt

12

Odp: I2C w MT300N V2

Udało mi się dodać, ale dosyć późno jest tworzony rtc i sysfixtime nie ustawia czasu na podstawie RTC sad

root@mt300n:~# dmesg | grep rtc
[    0.554196] hctosys: unable to open rtc device (rtc0)
[   13.740236] rtc-ds1307 0-0068: registered as rtc0
root@mt300n:~#

13

Odp: I2C w MT300N V2

Przy dodanym RTC do DTSa i dopisanym sleep 20 w /etc/init.d/sysfixtime wpis w dmesgu powstaje 20  sekund później.
Zakładam, że coś w pliku /etc/init.d/boot powoduje wykrycie i2c.

Na razie zostawiam temat i zostawiam wykrywanie RTC i ustawianie czasu w /etc/init.d/boot.

14 (edytowany przez tymmej 2018-10-05 09:56:14)

Odp: I2C w MT300N V2

Podsumowanie:

Uruchomienie i2c w mt300n v2:
w pliku dts (target/linux/ramips/dts/GL-MT300N-V2.dts)
dodać

&i2c {                                      
       status = "okay";
}                                   

Ustawienie GPIO45 i 46 jako GPIO (niepotrzebne do i2c):

Dopisać uart1 w:

ralink,group = "wdt", "gpio", "wled_an", "p0led_an", "p1led_an", "i2s", "uart1";
ralink,function = "gpio";

w tym samym pliku
oraz usunąć

&uart1 {                                      
       status = "okay";
} 

Jeżeli chcemy dopisać rtc do DTS to:

&i2c {
        status = "okay";

       ds1307@68 {
               compatible = "dallas,ds1307"; 
               reg = <0x68>;
       };
 }; 

15

Odp: I2C w MT300N V2

tymmej napisał/a:

Dopisać uart1 w:

ralink,group = "wdt", "gpio", "wled_an", "p0led_an", "p1led_an", "i2s", "uart1";
ralink,function = "gpio";

w tym samym pliku
oraz usunąć

&uart1 {                                      
       status = "okay";
} 

Sprecyzuj lepiej w poście, że to nie ma związku z I2C tylko 1Wire, bo się ludzie będą sugerować że to potrzebne do I2C.

16

Odp: I2C w MT300N V2

Poprawiłem.

Chyba znalazłem powód: /etc/init.d/boot wywołuje /sbin/kmodloader - pewnie dopiero po tym działa i2c i rtc.

17

Odp: I2C w MT300N V2

tymmej napisał/a:

Chyba znalazłem powód: /etc/init.d/boot wywołuje /sbin/kmodloader - pewnie dopiero po tym działa i2c i rtc.

Zawsze możesz sobie ten moduł wbudować w kernel zamiast go ładować.

18

Odp: I2C w MT300N V2

Po zmianie w .dtsi trzeba na nowo kompilować ?

19

Odp: I2C w MT300N V2

Tak, bo jest tylko plik tekstowy, a trzeba go "przekompilować" i ma się znaleźć wraz z kernelem w urządzeniu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

20

Odp: I2C w MT300N V2

można to skrócić ? czy rekompilacja będzie trwała tyle samo czasu ?

21

Odp: I2C w MT300N V2

Pierwszy raz trwa długo, następne są krótsze bo tylko kernel i zmiany są kompilowane.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.