Skip to content

Commit

Permalink
Добавлена поддержка i2c для ch341
Browse files Browse the repository at this point in the history
  • Loading branch information
nofeletru committed Dec 14, 2016
1 parent 3456124 commit e2559b1
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 6 deletions.
5 changes: 0 additions & 5 deletions software/main.pas
Expand Up @@ -1503,9 +1503,7 @@ procedure SelectHW(programmer: integer);
begin
MainForm.MenuSPIClock.Enabled:= true;
MainForm.MenuMicrowire.Enabled:= true;
MainForm.RadioI2C.Enabled:= true;
MainForm.RadioMw.Enabled:= true;
MainForm.MenuChip.Find('I2C').Enabled:= true;
MainForm.MenuChip.Find('Microwire').Enabled:= true;
CH341 := false;
end;
Expand All @@ -1514,10 +1512,7 @@ procedure SelectHW(programmer: integer);
begin
MainForm.MenuSPIClock.Enabled:= false;
MainForm.MenuMicrowire.Enabled:= false;
MainForm.RadioI2C.Enabled:= false;
MainForm.RadioMw.Enabled:= false;
MainForm.RadioSPI.Checked:= true;
MainForm.MenuChip.Find('I2C').Enabled:= false;
MainForm.MenuChip.Find('Microwire').Enabled:= false;
CH341 := true;
end;
Expand Down
43 changes: 42 additions & 1 deletion software/usbhid.pas
Expand Up @@ -32,7 +32,7 @@ function USBSendControlMessage(devHandle: Pusb_dev_handle; direction: byte; requ

implementation

uses main;
uses main, usbaspi2c;

function usbGetStringAscii(handle: pusb_dev_handle; index: Integer; langid: Integer; var buf: TPString; buflen: Integer): integer;
var
Expand Down Expand Up @@ -144,9 +144,50 @@ function usbOpenDevice(var device: Pusb_dev_handle; DevDscr: TDeviceDescription)
end;

function USBSendControlMessage(devHandle: Pusb_dev_handle; direction: byte; request, value, index, bufflen: integer; var buffer: array of byte): integer;
var
writebuff: array[0..2] of byte;
full_buffer: array of byte;
address_size: byte;
begin
if CH341 then
begin

if request = USBASP_FUNC_I2C_READ then
begin
writebuff[0] := byte(value);
writebuff[1] := hi(word(index));
writebuff[2] := lo(word(index));
address_size := hi(word(value))+1; //байты адреса + байт адреса устройства

if not CH341StreamI2C(0, address_size, @writebuff, bufflen, @buffer) then result :=0 else result := bufflen;
exit;
end;

if request = USBASP_FUNC_I2C_WRITE then
begin
address_size := hi(word(value))+1;
SetLength(full_buffer, SizeOf(buffer)+address_size);

full_buffer[0] := byte(value);

if address_size = I2C_1BYTE_ADDR+1 then
begin
full_buffer[1] := lo(word(index));
end;

if address_size = I2C_2BYTE_ADDR+1 then
begin
full_buffer[1] := hi(word(index));
full_buffer[2] := lo(word(index));
end;

move(buffer, full_buffer[address_size], bufflen);

if not CH341StreamI2C(0, address_size+bufflen, @full_buffer[0], 0, nil) then result :=0 else result := bufflen;
exit;
end;

//spi
CH341Set_D5_D0(0, $29, 0); //Вручную дергаем cs
if not CH341StreamSPI4(0, 0, bufflen, @buffer) then result :=0 else result := bufflen;
if (value = 1)then CH341Set_D5_D0(0, $29, 1); //Отпускаем cs
Expand Down

0 comments on commit e2559b1

Please sign in to comment.