l29ah / libmpsse

(a maintenance fork of the) Open source library for SPI/I2C control via FTDI chips

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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