4D434851h 0x4D434851 0100 1101 1011 0010 F2 - vyšli AA F2 BB B2 1011 0010 0100 1101 4D AA F2 BB C2 1100 0010 0100 0011 43 AA F2 BB 12 0001 0010 0100 1000 48 AA F2 BB 8A 1000 1010 0101 0001 51 Takže se to prostě píše od konce, ten byte, a AA F2 je vysílej byte AA EE by mohlo být vysílej pulsy na CLOCK a zDA SE, ze je to v C:\Documents and Settings\All Users\Dokumenty\Vrh2016\diskE\mikroproc02\33EV\devicefile_PICKIT\rok1314\Microchip\PICkit2_PCAppSource_V2_61\PICkit2V2\PICkit2V2 constants.cs C:\Documents and Settings\All Users\Dokumenty\Vrh2016\diskE\mikroproc02\33EV\devicefile_PICKIT\rok1314\Microchip\PICkit2_PCAppSource_V2_61\PICkit2V2\PICkit2V2\*.cs ------------------- MCLR is briefly driven high then low (P21)(1). 2. A 32-bit key sequence is clocked into PGDx. 3. MCLR is then driven high within a specified period of time and held. a význam je TAKE v C:\Documents and Settings\All Users\Dokumenty\Vrh2016\diskE\mikroproc02\33EV\devicefile_PICKIT\rok1314\Microchip\PICkit2_PCAppSource_V2_61 PICkit2SourceGuidePCv2-61FWv2-32.pdf ProgEntryScript je 21 a upraveny je 300 FA _VPP_OFF Turns off VPP PNP pass transistor. Akorát ve schématu žádný nevidím - Drs ? F7 _MCLR_GND_ON Turns on VPP NPN ground tam je tranzistor na zem, a POZOR, Vpp je vedeno přes odpor 5k5 takze kdyz mas na MCLR LEDku, nemůže to funfovat F9 _VPP_PWM_ON Start up VPP PWM. Allow 100ms to come up to voltage F5 _BUSY_LED_ON F3 _SET_ICSP_PINS data 00 SET_ICSP_PINS arg[1] = pin states <7 – 4> unused <3> PGD logic level <2> PGC logic level <1> 1= PGD input, 0= output <0> 1= PGC input, 0= output E8 _DELAY_LONG data 14 to číslo je 20 , a někde jinde jsem našel také 20 u 100ms Each unit of delay is 5.46ms. ‘0’= 256 units 14 hex = 20 dec ... 109.2 ms F6 _MCLR_GND_OFF MCLR driven HIGH Turns off VPP NPN ground. tak tady na tom MCLR nastavim napet FB _VPP_ON Turns on VPP PNP pass transistor. a tenhle tranzistor tam ASI nemame E7 _DELAY_SHORT doba P21 max 500 mikros data 17 Each unit of delay is 21.3us. ‘0’= 256 units 17hex SNAD 23 dec 490 mikros ale je to MAXIMALNE 500 mikros, tak to by asi stálo za to trochu ubrat FA _VPP_OFF MCLR driven LOW Turns off VPP PNP pass transistor F7 _MCLR_GND_ON Turns on VPP NPN ground. prostě tady končí ten prví pulz E7 _DELAY_SHORT data 2F 1ms a má tam být MINIMALNE 1 ms tohle prodloužit F2 _WRITE_BYTE_LITERAL data ctyrikrat Clocks out the following byte on PGC, PGD. Byte is shifted LSB first. PGD and PGC must be set to outputs before calling a má se počkat po dobu P19 minimálně 25 ns F6 _MCLR_GND_OFF tady jde MCLR do 1 FB _VPP_ON E8 _DELAY_LONG a u 33EV to ma byt 51ms !!!!! data 9 takze 9 je 49.14 ms datasheet říká minimálně 51 ms ne, neni, dej tam 0C - vice nez 10 dec EE _WRITE_BITS_LITERAL poznámka u scriptu, ze to vyrobí 5 pulsů data 05 00 jeste potom kvuli SEX cosi Clocks out the first N LSbits of ‘literal’ PGD and PGC must be set to outputs before calling. Set PGD, delay, PGC=1,delay, PGC=0 takže tohle opravdu udělá 5 period s PGD=0 -------------------- a jeste jednou to zdublujeme, 5 pulsiku ----------------------- a zacatek je jinak, strana 31 Read Dev ID script 22 predelany pro 33EV 299 0xAAD9 _COREINST24 3 byte následují, OK 0xBB00 0xBB02 0xBB04 040200 GOTO Shifts out 4 bits of zeroes, followed by arg1, arg2, then arg3. 0xAAD9 0xBB00 0xBB02 0xBB04 040200 GOTO 33EV32GM002 ma jenom jednu tuto sekvensi 0xAAD8 _NOP24 Shifts out 22 bits of zeroes. 0xAAD8 _NOP24 0xAAD8 _NOP24 0xAAD9 0xBB00 0xBB02 0xBB04 0xAAD8 _NOP24 0xAAD9 0xBBF0 0xBB0F 0xBB20 200FF0 200xx0 xx=FF MOV #, W0 0xAAD9 0xBB90 0xBB01 0xBB88 880190 MOV W0, TBLPAG JINAK EV 8802A0 0xAAD9 pozice 24 prvku pole 0xBB06 0xBB00 0xBB20 200006 2xxxx6 MOV #, W6 ve W6 je 0 0xAAD8 _NOP24 takže adresa FF0000 0xAAD8 _NOP24 0xAAD9 0xBB07 strana 45 manualu 0xBB00 0xBB20 200007 můj odhad: 000 do W7 clr W7 mají oni datasheet ma tady NOP sem: sem skace loop ????, asi 0xAAD9 0xBBB6 0xBB0B 0xBBBA BA0BB6 TBLRDL [W6++], [W7] a ve W7 je 0, to je tedy W0 BA0BB6 ANO, to je stejne 0xAAD8 _NOP24 0xAAD8 _NOP24 0xAAD9 pozice 40 prvek pole 0xBB20 0xBB3C 0xBB88 883C20 MOV W0, VISI JINAK 887C40 0xAAD8 _NOP24 0xAAD7 _VISI24 Shifts out 4 bits b0001, a byte of zeroes, then shifts in 2 bytes into the upload buffer 0xAAD8 _NOP24 0xAAE9 _LOOP 0x000D ???? proc 00 - desitkove ???? 0D - 13 0xBB01 arg[1] = Index offset to loop to arg[2] = Loop iterations The index offset is unsigned (always backwards), and is the number of bytes back from the 0xE9 control byte to loop. Value ‘1’ will loop to the byte prior to the 0xE9. Loop iterations gives the number of times the script loop is executed again. ‘0’=256x NOTE: LOOP commands may NOT be nested, but may be nested with a LOOPBUFFER command a to by proste znamenalo, ze to precte dve slova, tedy jeste revision devicefile_10 upraveno script pro read ID soucastky -------------------------------------- Tak to pojd udelat presne podle pdf dokumentu , a je to strana 32 a nefunguje to. DAle upravuji ProgEntry script - dle manualu tam ma byt jeste 5 pulzu ProgEntry script je 21 ------------------------------------------ Pracuji s devicefile 12 je tam part 33EV32GM002 ten ma Family 22 33EV32 ta má prog entry script 300 a ReadDevIDscript 299 a tyto dva scripty ted zreviduji ProgEntryScript je je 300 zde jsou předělané konstanty podle úvah výše FA _VPP_OFF Turns off VPP PNP pass transistor. Akorát ve schématu žádný nevidím - Drs ? F7 _MCLR_GND_ON Turns on VPP NPN ground tam je tranzistor na zem, a POZOR, Vpp je vedeno přes odpor 5k5 takze kdyz mas na MCLR LEDku, nemůže to funfovat F9 _VPP_PWM_ON Start up VPP PWM. Allow 100ms to come up to voltage F5 _BUSY_LED_ON F3 _SET_ICSP_PINS data 00 SET_ICSP_PINS arg[1] = pin states <7 – 4> unused <3> PGD logic level <2> PGC logic level <1> 1= PGD input, 0= output <0> 1= PGC input, 0= output E8 _DELAY_LONG data 14 to číslo je 20 , a někde jinde jsem našel také 20 u 100ms Each unit of delay is 5.46ms. ‘0’= 256 units 14 hex = 20 dec ... 109.2 ms F6 _MCLR_GND_OFF MCLR driven HIGH Turns off VPP NPN ground. tak tady na tom MCLR nastavim napet FB _VPP_ON Turns on VPP PNP pass transistor. a tenhle tranzistor tam ASI nemame E7 _DELAY_SHORT doba P21 max 500 mikros data 14 Each unit of delay is 21.3us. ‘0’= 256 units ale je to MAXIMALNE 500 mikros, tak to by asi stálo za to trochu ubrat dal jsme tomu 14 hex 20 dec 426 mikrosec FA _VPP_OFF MCLR driven LOW Turns off VPP PNP pass transistor F7 _MCLR_GND_ON Turns on VPP NPN ground. prostě tady končí ten prví pulz E7 _DELAY_SHORT data 3F 1ms a má tam být MINIMALNE 1 ms tohle prodloužit bzlo tu 2F, dal jsem 70 hex 2,3 ms F2 _WRITE_BYTE_LITERAL data ctyrikrat Clocks out the following byte on PGC, PGD. Byte is shifted LSB first. PGD and PGC must be set to outputs before calling a má se počkat po dobu P19 minimálně 25 ns F6 _MCLR_GND_OFF tady jde MCLR do 1 FB _VPP_ON E8 _DELAY_LONG a u 33EV to ma byt 51ms !!!!! data 0f 9 tadz bylo je 49.14 ms datasheet říká minimálně 51 ms ne, neni, dej tam 0f - vice nez 15 * 5,46 = 81.9 to bude stacit array 28 EE _WRITE_BITS_LITERAL poznámka u scriptu, ze to vyrobí 5 pulsů data 05 00 jeste potom kvuli SEX cosi Clocks out the first N LSbits of ‘literal’ PGD and PGC must be set to outputs before calling. Set PGD, delay, PGC=1,delay, PGC=0 takže tohle opravdu udělá 5 period s PGD=0 tohle dal jsme vlozil - pockame E7 _DELAY_SHORT 426 mikrosec data 14 MOZNA jste jednou pridat 5 pulzu ?????? 5 pulyů to skutečně má vyrobit podle ProgEntrz obrázku původní skript měl 5 pulsů u procesoru, který NEMEL 5 pulsů v prog entry ???? tak nevím, přidat dalších 5 ???? --------------------------------------------------- Read ID script je je 299 zde jsou předělané konstanty podle úvah výše čtu pdf file, a předělávám to podle něj TABLE 3-8: SERIAL INSTRUCTION EXECUTION FOR READING CODE MEMORY 0xAAD8 _NOP24 Shifts out 22 bits of zeroes. 0xAAD8 _NOP24 0xAAD8 _NOP24 0xAAD9 _COREINST24 3 byte následují, OK 0xBB00 0xBB02 0xBB04 040200 GOTO 0200 Shifts out 4 bits of zeroes, followed by arg1, arg2, then arg3. 0xAAD8 _NOP24 Shifts out 22 bits of zeroes. 0xAAD8 _NOP24 0xAAD8 _NOP24 0xAAD9 _COREINST24 3 byte následují, OK 0xBBF0 0xBB0F 0xBB20 200FF0 200xx0 xx=FF MOV #, W0 na pozici 13 0xAAD9 0xBBA0 0xBB02 0xBB88 8802A0 MOV W0, TBLPAG JINAK EV 8802A0 0xAAD9 pozice 18 prvku pole 0xBB06 0xBB00 0xBB20 200006 2xxxx6 MOV #, W6 ve W6 je 0 takže adresa FF0000 0xAAD9 pozice 22 array 0xBB80 0xBB03 0xBBEB EB0380 CLR W7 sem: sem skace loop na konci - muj odhad 0xAAD8 _NOP24 tohle je pole 26 0xAAD9 0xBBB6 0xBB0B 0xBBBA BA0BB6 TBLRDL [W6++], [W7] a ve W7 je 0, to je tedy W0 BA0BB6 ANO, to je stejne 0xAAD8 _NOP24 pole 31 0xAAD8 _NOP24 0xAAD8 _NOP24 0xAAD8 _NOP24 0xAAD8 _NOP24 0xAAD9 pozice prvek pole 0xBB40 0xBB7C 0xBB88 887C40 MOV W0, VISI JINAK 887C40 0xAAD8 _NOP24 pole 40 0xAAD7 _VISI24 Shifts out 4 bits b0001, a byte of zeroes, then shifts in 2 bytes into the upload buffer 0xAAD8 _NOP24 0xAAE9 _LOOP 0xBB11 11 hex 17 dec - na sem: 0xBB01 arg[1] = Index offset to loop to arg[2] = Loop iterations ------------------------ 0xAAD9 0xBB07 strana 45 manualu 0xBB00 0xBB20 200007 můj odhad: 000 do W7 clr W7 mají oni datasheet ma tady NOP sem: sem skace loop ????, asi 0xAAD8 _NOP24 0xAAD9 pozice 40 prvek pole 0xBB20 0xBB3C 0xBB88 883C20 MOV W0, VISI JINAK 887C40 0xAAD8 _NOP24 0xAAD7 _VISI24 Shifts out 4 bits b0001, a byte of zeroes, then shifts in 2 bytes into the upload buffer 0xAAD8 _NOP24 0xAAE9 _LOOP 0x000D ???? proc 00 - desitkove ???? 0D - 13 0xBB01 arg[1] = Index offset to loop to arg[2] = Loop iterations ---------------------------------------------- Devicefile 13 NAšlo PICa !!!!!!!!!!!!! Hura Problem: COnfig Words může být jenom 8 ale to budeme dále řešit upraveno v devicefile13 s devicefile 13 dále nehýbáme ----------------------------------- devicefile 14 - kopie 13 a další úpravy 7.6 Read Device Menu option Programmer -> Read Device “Read” Button 1. Check for a connected device in the currently selected Device Family. If none found, abort and update status. 2. Read program memory into program memory array using ProgEntryScript, 300 je ve family ProgMemRdPrepScrpt, NO ALE TEN NENI ! je ProgrMemAdrSetScript 23 je v device a ten nahradime scriptem 301 ProgMemRdScript, 24 je v device ProgExitScript. je ve family 3. If EEMem > 0, read EE data in to EE data array using ProgEntryScript, EERdPrepScript, EERdScript, and ProgExitScript. 4. If UserIDWords > 0, read User IDs using ProgEntryScript, UserIDRdPrepScript, UserIDRdScript, and ProgExitScript. 5. If ConfigWords > 0, read configuration words using ProgEntryScript, ConfigRdPrepScript, ConfigRdScript, and ProgExitScript. 6. Update status & “Source” line on GUI. Script 23 nastaveni adresy NAHRAZEN 301 AA D9 COREINST24 04 02 00 BB 00 BB 02 BB 04 AA D9 COREINST24 04 02 00 BB 00 BB 02 BB 04 AA D8 NOP24 AA D8 NOP24 AA D8 NOP24 AA D9 COREINST24 04 02 00 BB 00 BB 02 BB 04 AA D8 NOP24 AA D4 WRITE_BUFWORD_W W6 nacpeme 16 bitu z bufferu do W6 BB 06 číslo reg Forms & clocks 16-bit core instruction 0x2xxyyn : MOV #xxyy, Wn Where n= arg1 yy = first byte in download buffer xx = next byte in download buffer (includes SIX command) BB 06 číslo reg AA D3 WRITE_BUFBYTE_W nacpe 8 bitů do W0 BB 00 číslo reg. AA D9 COREINST24 88 01 90 MOV W0, TBLPAG BB 90 BB 01 BB 88 AA D9 COREINST24 20 78 47 2xxxx6 MOV #, W7 BB 47 20 F8 87 0784 BB 78 MOV #VISI, W7 strana 47 BB 20 !!!!!! ZMENIT NA 0F88 AA D8 NOP24 00 00 array 24 - zde ymena index puvodne ted 24 AA D9 COREINST24 20 F8 87 MOV #VISI, W7 strana 47 25 BB 47 BB 87 0F88 je cislo , 7 je register 26 BB 78 BB F8 27 BB 20 BB 20 28 AA D8 tak6e v TBLPAG m8m kus adresy , ve W6 je 16 bit; adresy, ve W7 je cislo 0784 hezk0, a co s t9m ?????????? strana 38 u 33EV32GM002 20F881 MOV #VISI, W1 0x2xxyyn : MOV #xxyy, Wn 0F88 je adresa VISI script 23 menime , uprava VISI Script 24 AA D9 COREINST24 BA 0B 96 1011 1010 0Bqq qddd dppp ssss BA 0000 1011 1001 0110 BB 96 ssss = 6 ppp = 001 ddd=0111 B=0 qqq=001 BB 0B ve file assembler.pdf se tvari, ye je to stejne TBLRDL BB BA a destination je W7 - ddd, a tam je to sileny cislo registr VISI AA D8 NOP24 AA D8 NOP24 AA D7 VISI24 16 bitu do bufferu AA D9 COREINST24 BA 8B B6 a tohle je TBLRDH BB B6 BB 8B BB BA AA D8 NOP24 AA D8 NOP24 AA EE WRITE_BITS_LITERAL write 1000 BB 04 4 bity BB 01 z cisla 01 1000 AA F2 WRITE_BYTE_LITERAL pisee to 8 bit do procesoru, same 0 BB 00 0 AA D6 RD2_BYTE_BUFFER cte byte y procesoru a cpe do bufferu AA EF READ_BYTE cte byte a zahodi ho AA E9 LOOP 00 14 o 20 dozadu - uplny zacatek 00 1F 31 krat - ???? Celkem 32 ???? AA D9 COREINST24 04 02 00 GOTO 0200 BB 00 BB 02 BB 04 AA D8 NOP24 00 00 00 00 SCRIPT 24 tedy zustava UPRAVENO V DEVICEFILE 15 - ymena toho jednoho scriptu, nastaveni adres, prepsano jenom adresa VISI ------------------------------------ jenomze ono to nefunguje takze script 24 predelame na script 302 - podle pdf Script 24 AA D9 COREINST24 BA 0B 96 1011 1010 0Bqq qddd dppp ssss BA 0000 1011 1001 0110 BB 96 ssss = 6 ppp = 001 ddd=0111 B=0 qqq=001 BB 0B ve file assembler.pdf se tvari, ze je to stejne TBLRDL BB BA a destination je W7 - ddd, a tam je to sileny cislo registr VISI AA D8 NOP24 AA D8 NOP24 v pdf je 5 NOPu AA D8 NOP24 pridany 3 AA D8 NOP24 AA D8 NOP24 AA D7 VISI24 16 bitu do bufferu AA D9 COREINST24 BA 8B B6 a tohle je TBLRDH BB B6 BB 8B BB BA AA D8 NOP24 AA D8 NOP24 AA D8 NOP24 v pdf je 5 x NOP, pridany 3 AA D8 NOP24 AA D8 NOP24 AA EE WRITE_BITS_LITERAL write 1000 BB 04 4 bity BB 01 z cisla 01 1000 AA F2 WRITE_BYTE_LITERAL pisee to 8 bit do procesoru, same 0 BB 00 0 AA D6 RD2_BYTE_BUFFER cte byte y procesoru a cpe do bufferu AA EF READ_BYTE cte byte a zahodi ho AA E9 LOOP BB 1A o 26 dozadu - uplny zacatek BB 1F 31 krat - ???? Celkem 32 ???? AA D8 NOP24 u toho GOTO maji v PDF vzdy 3NOPy pred a za AA D8 NOP24 AA D8 NOP24 AA D9 COREINST24 04 02 00 GOTO 0200 BB 00 BB 02 BB 04 AA D8 NOP24 AA D8 NOP24 AA D8 NOP24 00 00 00 00 -------------------------------------------------- a upravim take script 301 puvodne 23 zrusil 4 5 pridal 3 na konec pridat 6 a script je o 6 kratsi AA D8 NOP24 AA D8 NOP24 AA D8 NOP24 AA D9 COREINST24 04 02 00 BB 00 BB 02 BB 04 AA D8 NOP24 AA D8 NOP24 AA D8 NOP24 AA D4 WRITE_BUFWORD_W W6 nacpeme 16 bitu z bufferu do W6 BB 06 číslo reg Forms & clocks 16-bit core instruction 0x2xxyyn : MOV #xxyy, Wn Where n= arg1 yy = first byte in download buffer xx = next byte in download buffer (includes SIX command) AA D3 WRITE_BUFBYTE_W nacpe 8 bitů do W0 BB 00 číslo reg. AA D9 COREINST24 88 02 A0 MOV W0, TBLPAG BB A0 BB 02 BB 88 AA D9 COREINST24 20 78 47 2xxxx6 MOV #, W7 BB 87 20 F8 87 0784 BB F8 MOV #VISI, W7 strana 47 BB 20 !!!!!! ZMENIT NA 0F88 AA D8 NOP24 00 00 array 24 - zde ymena index puvodne ted 24 AA D9 COREINST24 20 F8 87 MOV #VISI, W7 strana 47 25 BB 47 BB 87 0F88 je cislo , 7 je register 26 BB 78 BB F8 27 BB 20 BB 20 28 AA D8 --------------------------------------- umime cist program mem fungujici je v devicefile_16 ------------------------------------ No a začneme dále s config words PAměT EEPROM pro program končí na 577F a hned za ní jsou konfigurační registry FSEC 0x5780 FBSLIM 0x5790 FSIGN 0x5794 FOSCSEL 0x5798 FOSC 0x579C FWDT 0x57A0 FPOR 0x57A4 FICD 0x57A8 FDMTINTVL 0x57AC FDMTINTVH 0x57B0 FDMTCNTL 0x57B4 FDMTCNTH 0x57B8 FDMT 0x57BC FDEVOPT 0x57C0 FALTREG 0x57C4 další adresa je 57C8 manuál říká konec na 0x0057FE má to 11200 dec instrukcí 0x005780 / 2 = 0x002BC0 11200 decimálně a tohle číslo jsme měli v ProgramMem u PartList v devicefile tak prostě do devicefile napíšeme 0x005800 / 2 a to bude konec EEPROM 2C00 změnil jsem na 2C00 No a vono se to prostě z procesoru přečte !!!!!! Stejně tak se to přečte i z hex file. Jenom je trochu problém, že na fantom byte je 00 - uvidíme, co to bude dělat při programování Položka CONFIG WORDS v device nemůže být menší než 4 , jinak se PICKIT2 hroutí. upraveno v devicefile 17 -------------------------------------- Bulk Erase Perform a chip erase using ProgEntryScript, ChipEraseScript, 25 303 ten nas and ProgExitScript nebudeme testovat WR bit ale počkáme 24ms - lépe 100 ms script si vyrobime uplne novy, podle pdf dokumentu PEEK_SFR da SFR registre in upload buffer VISI24 Shifts out 4 bits b0001, a byte of zeroes, then shifts in 2 bytes into the upload buffer. IF_GT_GOTO* If the last byte stored in the Upload buffer is greater than arg[1], then script execution will branch to the offset from the GOTO control byte given by arg[2]. The branch offset is signed 2’s complement. The compare is unsigned. TAk k tomu neco doprogramujeme. o 17 zpet 0001 0001 1110 1110 1110 1111 je -17 EF C:\Program Files\Microchip\PICkit 2 v2 devicefile 18 odtud funguje PICLIT se hrouti,kdyz ma plnou delku script file. Na konci musi mit trikrat 0 tedy posledni obsazeny prvek pole je 60 file18?2.xml je ten uloenz OHLEDNE GOTO: kladna cisla znamenaji skok dopredu, k vyssim prvkum pole ------------------------------------------ 2BC0 pri kontrole smazani funguje ERASE snad xml_20 a devicefile 20 --------------------------------- Programovani ProgEntryScript, ProgMemWrPrpScrpt, 26 muj bude mit cislo 304 ProgMemWrScript, 123 muj bude mit cislo 305 and ProgExitScript. Tady jsme asi trochu v haji, PROTOZE 0001 = Memory double-word operation u 33EV32GM ale u 33F Program 1 row (64 instruction words) of code memory or executive memory Poznámka u scriptu 123 loads W0-W3 with data from dld_buffer TBLWTL W0, [W7] BB0B80 TBLWTH W1, [W7++] BB9B81 TBLWTH W2, [W7] BB8B82 TBLWTL W3, [W7++] BB1B83 needs NOPS at end for clks to complete prog P13 = 1.5ms