Skip to content

Commit 0c0a643

Browse files
author
nofeletru
committed
Добавлена поддержка 24C1024
1 parent b6c0c5a commit 0c0a643

File tree

3 files changed

+122
-105
lines changed

3 files changed

+122
-105
lines changed

chiplist.xml

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,117 @@
1-
<?xml version="1.0"?>
2-
1+
<?xml version="1.0" encoding="utf-8"?>
32
<!---
43
size - размер данных микросхемы памяти в байтах(DEC)
54
page - размер страницы микросхемы памяти в байтах(DEC). Для SST AAI Word programm - SSTW. Для SST AAI Byte programm - SSTB.
65
id - индефикатор микросхемы памяти(HEX). Поддерживаются опкоды 9F, 90, AB
76
spicmd - команды для серий микросхем памяти 25, 45, 95
87
<locale lang="ru"/> - выбор файла локализации .
98
-->
10-
11-
<chiplist>
12-
<SPI>
9+
<chiplist>
10+
<SPI>
1311
<KB90XX>
14-
<KB9012 size="131072" page="128" id="0" spicmd="KB"/>
15-
</KB90XX>
12+
<KB9012 id="0" page="128" size="131072" spicmd="KB"/>
13+
</KB90XX>
1614
<AdestoTechnologies>
17-
<AT45DB041D size="540672" page="264" id="1F2400" spicmd="45"/>
18-
</AdestoTechnologies>
19-
<Atmel>
20-
<AT25010 size="128" page="1" spicmd="95"/>
21-
<AT25HP256 page="128" size="32768" spicmd="95"/>
22-
</Atmel>
23-
<cFeon>
24-
<cFeon25Q32 size="4194304" page="256" id="1C3016"/>
25-
</cFeon>
15+
<AT45DB041D id="1F2400" page="264" size="540672" spicmd="45"/>
16+
</AdestoTechnologies>
17+
<Atmel>
18+
<AT25010 page="1" size="128" spicmd="95"/>
19+
<AT25HP256 page="128" size="32768" spicmd="95"/>
20+
</Atmel>
21+
<cFeon>
22+
<cFeon25Q32 id="1C3016" page="256" size="4194304"/>
23+
</cFeon>
2624
<ST>
27-
<M25P10 size="131072" page="256" id="202011"/>
28-
<M95080 size="1024" page="32" spicmd="95"/>
29-
</ST>
25+
<M25P10 id="202011" page="256" size="131072"/>
26+
<M95080 page="32" size="1024" spicmd="95"/>
27+
</ST>
3028
<SST>
31-
<SST25VF512 size="65536" page="1" id="BF48"/>
32-
<SST25LF020A size="262144" page="SSTB" id="BF43"/>
33-
<SST25VF040B size="524288" page="SSTW" id="BF258D"/>
34-
<SST25VF080B size="1048576" page="SSTW" id="BF258E"/>
35-
</SST>
36-
<Spansion>
37-
<S25FL032 size="4194304" page="256" id="010215"/>
38-
<S25FL216K size="2097152" page="256" id="014015" spicmd="25"/>
39-
<S25FL016A size="2097152" page="256" id="010214" spicmd="25"/>
40-
</Spansion>
41-
<ELM-Technology>
42-
<GD25Q64 size="8388608" page="256" id="C84017"/>
43-
</ELM-Technology>
29+
<SST25VF512 id="BF48" page="1" size="65536"/>
30+
<SST25LF020A id="BF43" page="SSTB" size="262144"/>
31+
<SST25VF040B id="BF258D" page="SSTW" size="524288"/>
32+
<SST25VF080B id="BF258E" page="SSTW" size="1048576"/>
33+
</SST>
34+
<Spansion>
35+
<S25FL032 id="010215" page="256" size="4194304"/>
36+
<S25FL216K id="014015" page="256" size="2097152" spicmd="25"/>
37+
<S25FL016A id="010214" page="256" size="2097152" spicmd="25"/>
38+
</Spansion>
39+
<ELM-Technology>
40+
<GD25Q64 id="C84017" page="256" size="8388608"/>
41+
</ELM-Technology>
4442
<EON>
45-
<EN25F80 size="1048576" page="256" id="1C3114"/>
46-
<EN25F16 size="2097152" page="256" id="1C3115"/>
47-
<EN25T16 size="2097152" page="256" id="1C5115"/>
43+
<EN25F80 id="1C3114" page="256" size="1048576"/>
44+
<EN25F16 id="1C3115" page="256" size="2097152"/>
45+
<EN25T16 id="1C5115" page="256" size="2097152"/>
4846
</EON>
4947
<GigaDevice>
50-
<GD25Q16 size="2097152" page="256" id="C84015"/>
51-
<GD25Q080 size="1048576" page="256" id="C84014"/>
48+
<GD25Q16 id="C84015" page="256" size="2097152"/>
49+
<GD25Q080 id="C84014" page="256" size="1048576"/>
5250
</GigaDevice>
5351
<MACRONIX>
54-
<MX25L4005 size="524288" page="256" id="C22013"/>
55-
<MX25L8005 size="1048576" page="256" id="C22014"/>
56-
<MX25L3206E size="4194304" page="256" id="C22016"/>
57-
<MX25L1606E size="2097152" page="256" id="C22015"/>
58-
<MX25L1636D size="2097152" page="256" id="C22415"/>
59-
<MX25L6406E size="8388608" page="256" id="C22017"/>
60-
</MACRONIX>
61-
<Microchip>
62-
<x25LC040 size="512" page="16" spicmd="95"/>
63-
</Microchip>
64-
<Nansi>
65-
<N25S80 size="1048576" page="256" id="D53014"/>
66-
</Nansi>
52+
<MX25L4005 id="C22013" page="256" size="524288"/>
53+
<MX25L8005 id="C22014" page="256" size="1048576"/>
54+
<MX25L3206E id="C22016" page="256" size="4194304"/>
55+
<MX25L1606E id="C22015" page="256" size="2097152"/>
56+
<MX25L1636D id="C22415" page="256" size="2097152"/>
57+
<MX25L6406E id="C22017" page="256" size="8388608"/>
58+
</MACRONIX>
59+
<Microchip>
60+
<x25LC040 page="16" size="512" spicmd="95"/>
61+
</Microchip>
62+
<Nansi>
63+
<N25S80 id="D53014" page="256" size="1048576"/>
64+
</Nansi>
6765
<WINBOND>
68-
<W25Q16 size="2097152" page="256" id="EF4015"/>
69-
<W25Q32 size="4194304" page="256" id="EF4016"/>
70-
<W25Q64 size="8388608" page="256" id="EF4017"/>
71-
<W25Q128BV size="16777216" page="256" id="EF4018"/>
72-
<W25Q256FV size="33554432" page="256" id="EF4019"/>
73-
<W25D80 size="1048576" page="256" id="EF3014"/>
74-
<W25X32 size="4194304" page="256" id="EF3016"/>
75-
<W25X40 size="524288" page="256" id="EF3013"/>
66+
<W25Q16 id="EF4015" page="256" size="2097152"/>
67+
<W25Q32 id="EF4016" page="256" size="4194304"/>
68+
<W25Q64 id="EF4017" page="256" size="8388608"/>
69+
<W25Q128BV id="EF4018" page="256" size="16777216"/>
70+
<W25Q256FV id="EF4019" page="256" size="33554432"/>
71+
<W25D80 id="EF3014" page="256" size="1048576"/>
72+
<W25X32 id="EF3016" page="256" size="4194304"/>
73+
<W25X40 id="EF3013" page="256" size="524288"/>
7674
</WINBOND>
77-
<AMIC>
78-
<A25L080 size="1048576" page="256" id="373014"/>
79-
</AMIC>
80-
<PMC>
81-
<Pm25LV010 size="131072" page="256" id="7F9D7C"/>
82-
<Pm25LV020 size="262144" page="256" id="7F9D22"/>
83-
<Pm25W020 size="262144" page="256" id="7F9D7D"/>
75+
<AMIC>
76+
<A25L080 id="373014" page="256" size="1048576"/>
77+
</AMIC>
78+
<PMC>
79+
<Pm25LV010 id="7F9D7C" page="256" size="131072"/>
80+
<Pm25LV020 id="7F9D22" page="256" size="262144"/>
81+
<Pm25W020 id="7F9D7D" page="256" size="262144"/>
8482
</PMC>
85-
</SPI>
86-
<I2C>
87-
<x24Lxxx>
88-
<x24LC01 size="128" page="8" addrtype="1"/>
89-
<x24LC02 size="256" page="8" addrtype="1"/>
90-
<x24LC04 size="512" page="16" addrtype="2"/>
91-
<x24LC08 size="1024" page="16" addrtype="3"/>
92-
<x24LC16 size="2048" page="16" addrtype="4"/>
93-
<x24LC32 size="4096" page="32" addrtype="5"/>
94-
<x24LC64 size="8192" page="32" addrtype="5"/>
95-
<x24LC128 size="16384" page="64" addrtype="5"/>
96-
<x24LC256 size="32768" page="64" addrtype="5"/>
97-
<x24LC512 size="65536" page="128" addrtype="5"/>
98-
</x24Lxxx>
99-
<x24Cxx>
100-
<AT24C01 size="128" page="4" addrtype="0"/>
101-
<x24C01A size="128" page="2" addrtype="1"/>
102-
<x24C02A size="256" page="2" addrtype="1"/>
103-
<x24C04A size="512" page="8" addrtype="2"/>
104-
</x24Cxx>
105-
</I2C>
106-
<Microwire>
107-
<Microchip>
108-
<M93C86 size="2048" addrbitlen="10"/>
109-
<M93C76 size="1024" addrbitlen="10"/>
110-
<M93C66 size="512" addrbitlen="8"/>
111-
<M93C56 size="256" addrbitlen="8"/>
112-
<M93C46 size="128" addrbitlen="6"/>
113-
<M93C06 size="16" addrbitlen="6"/>
114-
</Microchip>
115-
</Microwire>
116-
<locale lang="ru"/>
117-
</chiplist>
83+
</SPI>
84+
<I2C>
85+
<x24Lxxx>
86+
<x24LC01 page="8" size="128" addrtype="1"/>
87+
<x24LC02 page="8" size="256" addrtype="1"/>
88+
<x24LC04 page="16" size="512" addrtype="2"/>
89+
<x24LC08 page="16" size="1024" addrtype="3"/>
90+
<x24LC16 page="16" size="2048" addrtype="4"/>
91+
<x24LC32 page="32" size="4096" addrtype="5"/>
92+
<x24LC64 page="32" size="8192" addrtype="5"/>
93+
<x24LC128 page="64" size="16384" addrtype="5"/>
94+
<x24LC256 page="64" size="32768" addrtype="5"/>
95+
<x24LC512 page="128" size="65536" addrtype="5"/>
96+
<x24LC1024 page="128" size="131072" addrtype="6"/>
97+
</x24Lxxx>
98+
<x24Cxx>
99+
<AT24C01 page="4" size="128" addrtype="0"/>
100+
<x24C01A page="2" size="128" addrtype="1"/>
101+
<x24C02A page="2" size="256" addrtype="1"/>
102+
<x24C04A page="8" size="512" addrtype="2"/>
103+
</x24Cxx>
104+
</I2C>
105+
<Microwire>
106+
<Microchip>
107+
<M93C86 size="2048" addrbitlen="10"/>
108+
<M93C76 size="1024" addrbitlen="10"/>
109+
<M93C66 size="512" addrbitlen="8"/>
110+
<M93C56 size="256" addrbitlen="8"/>
111+
<M93C46 size="128" addrbitlen="6"/>
112+
<M93C06 size="16" addrbitlen="6"/>
113+
</Microchip>
114+
</Microwire>
115+
<locale lang="ru"/>
116+
<options verify="0" mw_speed="32Khz" spi_speed="1_5Mhz"/>
117+
</chiplist>

software/main.lfm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ object MainForm: TMainForm
285285
'1BYTE_2BIT'
286286
'1BYTE_3BIT'
287287
'2BYTE'
288+
'2BYTE_1BIT'
288289
)
289290
ParentShowHint = False
290291
ShowHint = True
@@ -451,7 +452,7 @@ object MainForm: TMainForm
451452
Font.Height = -12
452453
HideSelection = False
453454
Lines.Strings = (
454-
'Программатор SPI, I2C, Microwire EEPROM v1.3.3'
455+
'Программатор SPI, I2C, Microwire EEPROM v1.3.5'
455456
'http://forum.easyelectronics.ru/viewtopic.php?f=17&t=10947'
456457
'tifa@nm.ru'
457458
)

software/usbaspi2c.pas

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
interface
66

77
uses
8-
Classes, SysUtils, libusb, usbhid;
8+
Classes, SysUtils, libusb, usbhid, utilfunc;
99

1010
const
1111
USBASP_FUNC_I2C_INIT = 70;
@@ -30,7 +30,7 @@ interface
3030

3131
procedure EnterProgModeI2C(devHandle: Pusb_dev_handle);
3232
function UsbAspI2C_BUSY(devHandle: Pusb_dev_handle; Address: byte): Boolean;
33-
function UsbAspI2C_Read(devHandle: Pusb_dev_handle; DevAddr, AddrType: byte; Address: word;var buffer: array of byte; bufflen: integer): integer;
33+
function UsbAspI2C_Read(devHandle: Pusb_dev_handle; DevAddr, AddrType: byte; Address: longword;var buffer: array of byte; bufflen: integer): integer;
3434
function UsbAspI2C_Write(devHandle: Pusb_dev_handle; DevAddr, AddrType: byte; Addr: longword; buffer: array of byte; bufflen: integer): integer;
3535

3636
implementation
@@ -53,18 +53,32 @@ function UsbAspI2C_BUSY(devHandle: Pusb_dev_handle; Address: byte): Boolean;
5353
end;
5454

5555
//Возвращает сколько байт прочитали
56-
function UsbAspI2C_Read(devHandle: Pusb_dev_handle; DevAddr, AddrType: byte; Address: word;var buffer: array of byte; bufflen: integer): integer;
56+
function UsbAspI2C_Read(devHandle: Pusb_dev_handle; DevAddr, AddrType: byte; Address: longword;var buffer: array of byte; bufflen: integer): integer;
5757
var
5858
value, index: Integer;
5959
begin
6060

6161
DevAddr := DevAddr or %10100000;
6262

6363
//шайтанама
64-
if (AddrType = I2C_ADDR_TYPE_2BYTE) or (AddrType = I2C_ADDR_TYPE_2BYTE_1BIT) then
64+
//TODO: Только с нулевого адреса автоинкрементом, так как не учитываются все типы адресации
65+
//TODO: 24LC1025
66+
//TODO: Привести в читабельный вид
67+
//TODO: Сбрасывать биты адресации(a0 a1 a2)
68+
69+
if (AddrType = I2C_ADDR_TYPE_2BYTE) then
70+
begin
71+
value := (I2C_2BYTE_ADDR shl 8) or (DevAddr);
72+
index := Word(Address);
73+
end else
74+
if (AddrType = I2C_ADDR_TYPE_2BYTE_1BIT) then
6575
begin
6676
value := (I2C_2BYTE_ADDR shl 8) or (DevAddr);
67-
index := Address;
77+
78+
if Hi(Address) and (1 shl 0) <> 0 then
79+
value := value or (1 shl 1);
80+
81+
index := Word(Address);
6882
end else
6983
if AddrType = I2C_ADDR_TYPE_7BIT then
7084
begin
@@ -89,7 +103,9 @@ function UsbAspI2C_Write(devHandle: Pusb_dev_handle; DevAddr, AddrType: byte; Ad
89103
//Lo(index) = 4; Lo адрес
90104
//Hi(index) = 5; Hi адрес
91105
//шайтанама
92-
//TODO: Moar addr types
106+
//TODO: 24LC1025
107+
//TODO: Привести в читабельный вид
108+
//TODO: Сбрасывать биты адресации(a0 a1 a2)
93109

94110
DevAddr := DevAddr or %10100000;
95111

0 commit comments

Comments
 (0)