I2C GetAck() doesn't work
l29ah opened this issue · comments
In fact, the consecutive raw_read
calls in Write
return the increasing 1
bit sequence instead of the meaningful data:
(gdb) p mpsse->rack
$18 = 1 '\001'
(gdb) c
Continuing.
NACK: 1
Thread 1 "ssd1306-libmpss" hit Breakpoint 1, Write (mpsse=0x4e91eae70, data=0x38b5937c657 "", size=1)
at mpsse.c:732
732 {
(gdb) c
Continuing.
Thread 1 "ssd1306-libmpss" hit Breakpoint 2, raw_read (mpsse=mpsse@entry=0x4e91eae70,
buf=buf@entry=0x4e91eaf17 "\001!\002", size=size@entry=1) at support.c:40
40 {
(gdb) fin
Run till exit from #0 raw_read (mpsse=mpsse@entry=0x4e91eae70, buf=buf@entry=0x4e91eaf17 "\001!\002",
size=size@entry=1) at support.c:40
0x0000035e4ae6c37f in Write (mpsse=0x4e91eae70, data=0x38b5937c657 "", size=1) at mpsse.c:773
773 if (raw_read(mpsse, (unsigned char *) &mpsse->rack, 1) != 1) {
Value returned is $19 = 1
(gdb) p mpsse->rack
$20 = 3 '\003'
(gdb) c
Continuing.
NACK: 1
Thread 1 "ssd1306-libmpss" hit Breakpoint 1, Write (mpsse=0x4e91eae70, data=0x38b5937c64c "\256+\241;\001",
size=1) at mpsse.c:732
732 {
(gdb) c
Continuing.
Thread 1 "ssd1306-libmpss" hit Breakpoint 2, raw_read (mpsse=mpsse@entry=0x4e91eae70,
buf=buf@entry=0x4e91eaf17 "\003!\002", size=size@entry=1) at support.c:40
40 {
(gdb) fin
Run till exit from #0 raw_read (mpsse=mpsse@entry=0x4e91eae70, buf=buf@entry=0x4e91eaf17 "\003!\002",
size=size@entry=1) at support.c:40
0x0000035e4ae6c37f in Write (mpsse=0x4e91eae70, data=0x38b5937c64c "\256+\241;\001", size=1) at mpsse.c:773
773 if (raw_read(mpsse, (unsigned char *) &mpsse->rack, 1) != 1) {
Value returned is $21 = 1
(gdb) p mpsse->rack
$22 = 7 '\a'
(gdb) c
Continuing.
NACK: 1
Thread 1 "ssd1306-libmpss" hit Breakpoint 1, Write (mpsse=0x4e91eae70, data=0x38b5937c656 "x", size=1)
at mpsse.c:732
732 {
(gdb) c
Continuing.
Thread 1 "ssd1306-libmpss" hit Breakpoint 2, raw_read (mpsse=mpsse@entry=0x4e91eae70,
buf=buf@entry=0x4e91eaf17 "\a!\002", size=size@entry=1) at support.c:40
40 {
(gdb) fin
Run till exit from #0 raw_read (mpsse=mpsse@entry=0x4e91eae70, buf=buf@entry=0x4e91eaf17 "\a!\002",
size=size@entry=1) at support.c:40
0x0000035e4ae6c37f in Write (mpsse=0x4e91eae70, data=0x38b5937c656 "x", size=1) at mpsse.c:773
773 if (raw_read(mpsse, (unsigned char *) &mpsse->rack, 1) != 1) {
Value returned is $23 = 1
(gdb) p mpsse->rack
$24 = 15 '\017'
(gdb) c
Continuing.
NACK: 1
Thread 1 "ssd1306-libmpss" hit Breakpoint 1, Write (mpsse=0x4e91eae70, data=0x38b5937c657 "", size=1)
at mpsse.c:732
732 {
(gdb) c
Continuing.
Thread 1 "ssd1306-libmpss" hit Breakpoint 2, raw_read (mpsse=mpsse@entry=0x4e91eae70,
buf=buf@entry=0x4e91eaf17 "\017!\002", size=size@entry=1) at support.c:40
40 {
(gdb) fin
Run till exit from #0 raw_read (mpsse=mpsse@entry=0x4e91eae70, buf=buf@entry=0x4e91eaf17 "\017!\002",
size=size@entry=1) at support.c:40
0x0000035e4ae6c37f in Write (mpsse=0x4e91eae70, data=0x38b5937c657 "", size=1) at mpsse.c:773
773 if (raw_read(mpsse, (unsigned char *) &mpsse->rack, 1) != 1) {
Value returned is $25 = 1
(gdb) p mpsse->rack
$26 = 31 '\037'
May be related: devttys0#33
Eh, the problem was me not connecting the FTDI input and output pins (ADBUS{1,2}) together. See https://github.com/l29ah/libmpsse/blob/master/docs/AN_135_MPSSE_Basics.pdf