Witajcie.
Próbuję rozgryźć protokół PDI, tzn dobrać się do układu Xmega innym prockiem.
Stanąłem na samym początku, nie mogę w ogóle włączyć trybu PDI.
Zacytuję tutaj DS od Xmega16A4:
Ok, a więc na początku muszę podciągnąć linię DATA do VCC na okres dłuższy niż minimalny wymagany czas trwania impulsu linii RESET. Nota mówi, że typowo jest to 90ns a maksymalnie 1000ns. Ok, podciągam tą linię na 1us w górę, a następnie gdy już zwykła funkcja resetu jest wyłączona(?), włączam zegar > 10kHz. Ponieważ minimalna prędkość programowania to 10kHz, i poniżej tej wartości PDI zostanie wyłączone.
Sytuacja jest taka że układ się resetuje, ale nie z powodu wejścia w tryb PDI. Zwyczajnie, od stanu niskiego na RESET. Ponieważ gdy skończę wysyłać zegar z niskim stanem końcowym to układ nie budzi się, a gdy z wysokim to wstaje.
Napisano, że mam zacząć wysyłać zegar nie później jak 100us po tym jak funkcja resetu zostanie wyłączona. CZYLI KIEDY? Skąd mam wiedzieć kiedy ona zostaje wyłączona, skoro czas potrzebny na reset (czyli linia DATA w górze) podano od 90 do 1000ns? Próbowałem różnych czasów na chybił trafił ale nic to nie daje
Próbuję rozgryźć protokół PDI, tzn dobrać się do układu Xmega innym prockiem.
Stanąłem na samym początku, nie mogę w ogóle włączyć trybu PDI.
Zacytuję tutaj DS od Xmega16A4:
enabling napisał:The PDI Physical must be enabled before it can be used. This is done by first forcing the PDI_DATA line high for a period longer than the equivalent external reset minimum pulse width (refer to device data sheet for external reset pulse width data). This will disable the RESET functionality of the Reset pin, if not already disabled by the fuse settings.
In the next step of the enabling procedure the PDI_DATA line must be kept high for 16 PDI_CLK cycles (16 positive edges detected). The first PDI_CLK cycle must start no later than 100uS after the RESET functionality of the Reset pin was disabled. If this does not occur in time the RESET functionality of the Reset pin is automatically enabled again and the enabling procedure must start over again.
After this the PDI is enabled and ready to receive instructions. The enable sequence is shown in Figure 29-3 on page 346.![]()
The RESET pin is sampled when the PDI interface is enabled. The RESET register is then set according to the state of the RESET pin, preventing the device from running code after the reset functionality of this pin is disabled.
The PDI_DATA pin has an internal pull-down resistor.
disabling napisał:If the clock frequency on the PDI_CLK is lower than approximately 10 kHz, this is regarding as inactivity on the clock line. This will then automatically disable the PDI. If not disabled by fuse, the RESET function on the Reset (PDI_CLK) pin is automatically enabled again. If the time-out occurs during the PDI enabling sequence, the whole sequence must be started from the beginning.
This also means that the minimum programming frequency is approximately 10 kHz.
Ok, a więc na początku muszę podciągnąć linię DATA do VCC na okres dłuższy niż minimalny wymagany czas trwania impulsu linii RESET. Nota mówi, że typowo jest to 90ns a maksymalnie 1000ns. Ok, podciągam tą linię na 1us w górę, a następnie gdy już zwykła funkcja resetu jest wyłączona(?), włączam zegar > 10kHz. Ponieważ minimalna prędkość programowania to 10kHz, i poniżej tej wartości PDI zostanie wyłączone.
Sytuacja jest taka że układ się resetuje, ale nie z powodu wejścia w tryb PDI. Zwyczajnie, od stanu niskiego na RESET. Ponieważ gdy skończę wysyłać zegar z niskim stanem końcowym to układ nie budzi się, a gdy z wysokim to wstaje.
Napisano, że mam zacząć wysyłać zegar nie później jak 100us po tym jak funkcja resetu zostanie wyłączona. CZYLI KIEDY? Skąd mam wiedzieć kiedy ona zostaje wyłączona, skoro czas potrzebny na reset (czyli linia DATA w górze) podano od 90 do 1000ns? Próbowałem różnych czasów na chybił trafił ale nic to nie daje
