SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Jetson TK1 posiada dwa zegary czasu rzeczywistego - pierwszy z nich znajduje się w kompaktowym układzie PMU AS3722, natomiast drugi obecny jest w układzie SoC Tegra TK1. W podstawowej dystrybucji Linux 4 Tegra, domyślnym zegarem jest ten pierwszy. W przypadku Jetsona jest taki problem, że nie posiada on podtrzymania bateryjnego dla zegarów - w praktyce oznacza to utratę ustawionej daty i czasu po zaniku zasilania. Oczywiście, kiedy zostaniemy połączeni z siecią, czas jest synchronizowany z serwerów NTP, ale kłopot pojawia się, gdy nie jesteśmy połączeni z Internetem.

Na pomoc przyjdzie nam opisywany już wcześniej układ DS3231 oraz magistrala I2C oraz moja kompilacja jądra The Grinch  w wersji minimum 19.3.4. O samym jądrze i dodatkowych możliwościach jakie przynosi przeczytacie na forum NVIDIA Developer Zone.

Do dyspozycji dostajemy cztery magistrale I2C, dwie w logice 1.8V i dwie w logice 3.3V:

  • GEN1_I2C (1.8V) na 50-pinowym złączu J3A1 i 75-pinowym złączu J3A2 (i2c-0)
  • GEN2_I2C (3.3V) na 50-pinowym złączu J3A1 (i2c-1)
  • PWR_I2C (1.8V) na 75-pinowym złączu J3A2 (i2c-4)
  • CAM_I2C (3.3V) na 75-pinowym złączu J3A2 (i2c-2)

Ponieważ DS3231 doskonale radzi sobie również przy napięciu zasilania 3.3V, skorzystamy z GEN2_I2C (i2c-1)

Linie sygnałowe podciągnięte są już do napięć zasilania poprzez rezystory 1kΩ, więc wystarczy praktycznie podłączyć nasz układ:

Jeśli podłączyliśmy wszystko poprawnie, powinniśmy zobaczyć nasz zegar RTC na magistrali i2c-1 pod adresem 0x68.

  1. # sudo i2cdetect -y -r 1
  1.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
  2. 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
  3. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  4. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  5. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  6. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  7. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  8. 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
  9. 70: -- -- -- -- -- -- -- --

Następnie możemy dołączyć DS3231 do magistrali:

  1. # echo ds3231 0x68 | sudo tee /sys/class/i2c-dev/i2c-1/device/new_device

Po tym zabiegu, powinien załadować się nam moduł rtc_ds1307. Możemy to sprawdzić za pomocą polecenia lsmod.

  1. Module                  Size  Used by
  2. rtc_ds1307             10881  0

Dodatkowo powinniśmy mieć już dostęp do naszego zegara poprzez nowo utworzone urządzenie /dev/rtc1 i uzyskać możliwość zapisania do niego aktualnego czasu:

  1. # sudo hwclock -w -f /dev/rtc1

Sprawdźmy, czy czas został zapisany i możemy go odczytać:

  1. # sudo hwclock -r -f /dev/rtc1
  2. Thu 21 Aug 2014 11:01:38 PM UTC  -0.434869 seconds

Na zakończenie, możemy dodać dwie linie do naszego skryptu rc.local w celu automatyzacji procesu przy starcie systemu:

  1. echo ds3231 0x68 | sudo tee /sys/class/i2c-dev/i2c-1/device/new_device
  2. sudo hwclock -s -f /dev/rtc1

Gdybyśmy chcieli, aby nasz DS3231 był domyślnym zegarem rtc0, musimy zablokować moduł rtc_as3722 w pliku /etc/modprobe.d/blacklist.conf dodając linię:

  1. blacklist rtc_as3722

Należy przy tym pamiętać, aby zmienić w pliku rc.local poprzedni wpis, aby odczyt odbywał się z rtc0 zamiast rtc1, ponieważ po tym zabiegu nasz układ będzie urządzeniem rtc0.

Komentarze Komentarze
Avatar 2
Rafal Windows 7 / Safari 537.36
05 August 2015 - 12:24 Brak informacji

Czy magistrala i2c na Jetsonie wymaga jakis dodatkowych operacji aktywacyjnych? Pytam poniewaz nie moge uzyskac komunikacji z modulem fm http://www.seeedstudio.com/depot/Grove-I2C-FM-Receiver-p-1953.html Dodam, ze modul dziala bez problemu podlaczony do BeagleBone Black.

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 39.0
05 August 2015 - 21:20 Bytom

Czy przypadkieb BBC nie ma na i2c poziomów 5v? W jetsonie masz 3.3 lub 1.8.

Avatar 2
Rafal Android 4.4 / Safari 537.36
05 August 2015 - 21:53 Szczecin

Sprawdzalem multimetrem poziomy i na BBB mam 3,3v na liniach scl i sda

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 39.0
07 August 2015 - 00:07 Bytom

Sprawdź na schematach TK1 jakie są rezystory podciągające o ile są

Avatar 2
Rafal Windows 7 / Safari 537.36
07 August 2015 - 09:00 Brak informacji

Na schemacie są rezystory 1K podciagnięte do 3,3V o oznaczeniach R2B6 i R2B8. Dla pewnosci sprawdzilem poziom na liniach SCL i SDA na Jetsonie i mam 3,3V w stanie nieaktywnym. Dodam jeszcze, że odbiornik fm z którym próbuję się skomunikowac jest widoczny na magistrali BBB pod adresami 0x10 0x11 i 0x60 po skanowaniu programem i2cdetect. Do sterowania sluży adres 0x10. Na Jetsonie nie widac zadnego z tych adresow po skanowaniu. Ale zeby bylo ciekawiej sprobowalem z programu w C czytac bezposrednio z tych adresow na Jetsonie. I o ile na 0x10 i 0x11 nic nie uzyskalem to z 0x60 dostaje jakies wartosci i odbiornik fm odpowiada bitem ACK na wywolania. Wiem to bo podlaczylem do linii analiazator sygnalow do I2C i na odczytach widac ze komunikacja wyglada na wlasciwa. Jednak tak jak wczesniej pisalem do sterowania sluzy adres 0x10 wiec w dalszym ciagu nie jestem w stanie sterowac odbiornikiem fm.

Avatar 2
Rafal Windows 7 / Safari 537.36
07 August 2015 - 09:00 Brak informacji

Na schemacie są rezystory 1K podciagnięte do 3,3V o oznaczeniach R2B6 i R2B8. Dla pewnosci sprawdzilem poziom na liniach SCL i SDA na Jetsonie i mam 3,3V w stanie nieaktywnym. Dodam jeszcze, że odbiornik fm z którym próbuję się skomunikowac jest widoczny na magistrali BBB pod adresami 0x10 0x11 i 0x60 po skanowaniu programem i2cdetect. Do sterowania sluży adres 0x10. Na Jetsonie nie widac zadnego z tych adresow po skanowaniu. Ale zeby bylo ciekawiej sprobowalem z programu w C czytac bezposrednio z tych adresow na Jetsonie. I o ile na 0x10 i 0x11 nic nie uzyskalem to z 0x60 dostaje jakies wartosci i odbiornik fm odpowiada bitem ACK na wywolania. Wiem to bo podlaczylem do linii analiazator sygnalow do I2C i na odczytach widac ze komunikacja wyglada na wlasciwa. Jednak tak jak wczesniej pisalem do sterowania sluzy adres 0x10 wiec w dalszym ciagu nie jestem w stanie sterowac odbiornikiem fm.