Skip to content

Commit

Permalink
Добавлено чтение id по опкоду 15h
Browse files Browse the repository at this point in the history
  • Loading branch information
nofeletru committed Mar 29, 2017
1 parent 8e65a1d commit f970f9e
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 21 deletions.
32 changes: 17 additions & 15 deletions software/main.pas
Expand Up @@ -2565,32 +2565,31 @@ procedure TMainForm.ButtonBlockClick(Sender: TObject);
procedure TMainForm.ButtonReadIDClick(Sender: TObject);
var
XMLfile: TXMLDocument;
ID: array[0..2] of byte;
ID90H: array[0..1] of byte;
IDABH: byte;
IDstr: string[6];
ID: MEMORY_ID;
IDstr9FH: string[6];
IDstr90H: string[4];
IDstrABH: string[6];
IDstr15H: string[4];
begin
try
if not OpenDevice() then exit;
LockControl();
FillByte(ID, 3, $FF);
FillByte(ID90H, 2, $FF);
FillByte(IDABH, 1, $FF);
FillByte(ID.ID9FH, 3, $FF);
FillByte(ID.ID90H, 2, $FF);
FillByte(ID.IDABH, 1, $FF);
FillByte(ID.ID15H, 2, $FF);
if not SetSPISpeed(0) then exit;

EnterProgMode25(hUSBdev);
UsbAsp25_ReadID(hUSBDev, ID);
UsbAsp25_Read(hUSBDev, $90, 0, ID90H, 2);
UsbAsp25_Read(hUSBDev, $AB, 0, IDABH, 1);
ExitProgMode25(hUSBdev);

USB_Dev_Close(hUSBdev);

IDstr := Upcase(IntToHex(ID[0], 2)+IntToHex(ID[1], 2)+IntToHex(ID[2], 2));
IDstr90H := Upcase(IntToHex(ID90H[0], 2)+IntToHex(ID90H[1], 2));
IDstrABH := Upcase(IntToHex(IDABH, 2));
IDstr9FH := Upcase(IntToHex(ID.ID9FH[0], 2)+IntToHex(ID.ID9FH[1], 2)+IntToHex(ID.ID9FH[2], 2));
IDstr90H := Upcase(IntToHex(ID.ID90H[0], 2)+IntToHex(ID.ID90H[1], 2));
IDstrABH := Upcase(IntToHex(ID.IDABH, 2));
IDstr15H := Upcase(IntToHex(ID.ID15H[0], 2)+IntToHex(ID.ID15H[1], 2));

if FileExists('chiplist.xml') then
begin
Expand All @@ -2607,22 +2606,25 @@ procedure TMainForm.ButtonReadIDClick(Sender: TObject);
ChipSearchForm.ListBoxChips.Clear;
ChipSearchForm.EditSearch.Text:= '';

FindChip.FindChip(XMLfile, '', IDstr);
FindChip.FindChip(XMLfile, '', IDstr9FH);
if ChipSearchForm.ListBoxChips.Items.Capacity = 0 then FindChip.FindChip(XMLfile, '', IDstr90H);
if ChipSearchForm.ListBoxChips.Items.Capacity = 0 then FindChip.FindChip(XMLfile, '', IDstrABH);
if ChipSearchForm.ListBoxChips.Items.Capacity = 0 then FindChip.FindChip(XMLfile, '', IDstr15H);

if ChipSearchForm.ListBoxChips.Items.Capacity > 0 then
begin
ChipSearchForm.Show;
LogPrint('ID(9F): '+ IDstr);
LogPrint('ID(9F): '+ IDstr9FH);
LogPrint('ID(90): '+ IDstr90H);
LogPrint('ID(AB): '+ IDstrABH);
LogPrint('ID(15): '+ IDstr15H);
end
else
begin
LogPrint('ID(9F): '+ IDstr +STR_ID_UNKNOWN);
LogPrint('ID(9F): '+ IDstr9FH +STR_ID_UNKNOWN);
LogPrint('ID(90): '+ IDstr90H +STR_ID_UNKNOWN);
LogPrint('ID(AB): '+ IDstrABH +STR_ID_UNKNOWN);
LogPrint('ID(15): '+ IDstr15H +STR_ID_UNKNOWN);
end;

XMLfile.Free;
Expand Down
39 changes: 33 additions & 6 deletions software/usbasp25.pas
Expand Up @@ -38,7 +38,14 @@ interface
WT_PAGE = 0;
WT_SSTB = 1;
WT_SSTW = 2;
type

MEMORY_ID = record
ID9FH: array[0..2] of byte;
ID90H: array[0..1] of byte;
IDABH: byte;
ID15H: array[0..1] of byte;
end;

function UsbAsp25_Busy(devHandle: Pusb_dev_handle): boolean;

Expand All @@ -50,7 +57,7 @@ function UsbAsp25_Read32bitAddr(devHandle: Pusb_dev_handle; Opcode: byte; Addr:
function UsbAsp25_Write(devHandle: Pusb_dev_handle; Opcode: byte; Addr: longword; buffer: array of byte; bufflen: integer): integer;
function UsbAsp25_Write32bitAddr(devHandle: Pusb_dev_handle; Opcode: byte; Addr: longword; buffer: array of byte; bufflen: integer): integer;

function UsbAsp25_ReadID(devHandle: Pusb_dev_handle; var ID: array of byte): integer;
function UsbAsp25_ReadID(devHandle: Pusb_dev_handle; var ID: MEMORY_ID): integer;

function UsbAsp25_Wren(devHandle: Pusb_dev_handle): integer;
function UsbAsp25_Wrdi(devHandle: Pusb_dev_handle): integer;
Expand Down Expand Up @@ -124,16 +131,36 @@ procedure ExitProgMode25(devHandle: Pusb_dev_handle);
USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_DISCONNECT, 0, 0, 0, dummy);
end;

//Читает 3 байта id
function UsbAsp25_ReadID(devHandle: Pusb_dev_handle; var ID: array of byte): integer;
//Читает id и заполняет структуру
function UsbAsp25_ReadID(devHandle: Pusb_dev_handle; var ID: MEMORY_ID): integer;
var
buffer: array[0..2] of byte;
buffer: array[0..3] of byte;
begin
FillByte(buffer, 3, $FF);
//9F
buffer[0] := $9F;
USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0, 0, 1, buffer);
FillByte(buffer, 4, $FF);
result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1, 0, 3, buffer);
move(buffer, ID, 3);
move(buffer, ID.ID9FH, 3);
//90
FillByte(buffer, 4, 0);
buffer[0] := $90;
USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0, 0, 4, buffer);
result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1, 0, 2, buffer);
move(buffer, ID.ID90H, 2);
//AB
FillByte(buffer, 4, 0);
buffer[0] := $AB;
USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0, 0, 4, buffer);
result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1, 0, 1, buffer);
move(buffer, ID.IDABH, 1);
//15
buffer[0] := $AB;
USBSendControlMessage(devHandle, PC2USB, USBASP_FUNC_25_WRITE, 0, 0, 1, buffer);
FillByte(buffer, 4, $FF);
result := USBSendControlMessage(devHandle, USB2PC, USBASP_FUNC_25_READ, 1, 0, 2, buffer);
move(buffer, ID.ID15H, 2);

end;

//Возвращает сколько байт прочитали
Expand Down

0 comments on commit f970f9e

Please sign in to comment.