@@ -38,7 +38,14 @@ interface
3838 WT_PAGE = 0 ;
3939 WT_SSTB = 1 ;
4040 WT_SSTW = 2 ;
41+ type
4142
43+ MEMORY_ID = record
44+ ID9FH: array [0 ..2 ] of byte;
45+ ID90H: array [0 ..1 ] of byte;
46+ IDABH: byte;
47+ ID15H: array [0 ..1 ] of byte;
48+ end ;
4249
4350function UsbAsp25_Busy (devHandle: Pusb_dev_handle): boolean;
4451
@@ -50,7 +57,7 @@ function UsbAsp25_Read32bitAddr(devHandle: Pusb_dev_handle; Opcode: byte; Addr:
5057function UsbAsp25_Write (devHandle: Pusb_dev_handle; Opcode: byte; Addr: longword; buffer: array of byte; bufflen: integer): integer;
5158function UsbAsp25_Write32bitAddr (devHandle: Pusb_dev_handle; Opcode: byte; Addr: longword; buffer: array of byte; bufflen: integer): integer;
5259
53- function UsbAsp25_ReadID (devHandle: Pusb_dev_handle; var ID: array of byte ): integer;
60+ function UsbAsp25_ReadID (devHandle: Pusb_dev_handle; var ID: MEMORY_ID ): integer;
5461
5562function UsbAsp25_Wren (devHandle: Pusb_dev_handle): integer;
5663function UsbAsp25_Wrdi (devHandle: Pusb_dev_handle): integer;
@@ -124,16 +131,36 @@ procedure ExitProgMode25(devHandle: Pusb_dev_handle);
124131 USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_DISCONNECT, 0 , 0 , 0 , dummy);
125132end ;
126133
127- // Читает 3 байта id
128- function UsbAsp25_ReadID (devHandle: Pusb_dev_handle; var ID: array of byte ): integer;
134+ // Читает id и заполняет структуру
135+ function UsbAsp25_ReadID (devHandle: Pusb_dev_handle; var ID: MEMORY_ID ): integer;
129136var
130- buffer: array [0 ..2 ] of byte;
137+ buffer: array [0 ..3 ] of byte;
131138begin
132- FillByte(buffer, 3 , $FF);
139+ // 9F
133140 buffer[0 ] := $9F ;
134141 USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0 , 0 , 1 , buffer);
142+ FillByte(buffer, 4 , $FF);
135143 result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1 , 0 , 3 , buffer);
136- move(buffer, ID, 3 );
144+ move(buffer, ID.ID9FH, 3 );
145+ // 90
146+ FillByte(buffer, 4 , 0 );
147+ buffer[0 ] := $90 ;
148+ USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0 , 0 , 4 , buffer);
149+ result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1 , 0 , 2 , buffer);
150+ move(buffer, ID.ID90H, 2 );
151+ // AB
152+ FillByte(buffer, 4 , 0 );
153+ buffer[0 ] := $AB;
154+ USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0 , 0 , 4 , buffer);
155+ result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1 , 0 , 1 , buffer);
156+ move(buffer, ID.IDABH, 1 );
157+ // 15
158+ buffer[0 ] := $AB;
159+ USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0 , 0 , 1 , buffer);
160+ FillByte(buffer, 4 , $FF);
161+ result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1 , 0 , 2 , buffer);
162+ move(buffer, ID.ID15H, 2 );
163+
137164end ;
138165
139166// Возвращает сколько байт прочитали
0 commit comments