i2c almost working for me, was Re: i2c still not working for me
Daniel Braniss
danny at cs.huji.ac.il
Fri Apr 19 07:21:06 UTC 2019
> On 18 Apr 2019, at 17:19, Ian Lepore <ian at freebsd.org> wrote:
>
> On Thu, 2019-04-18 at 10:12 +0300, Daniel Braniss wrote:
>>> On 17 Apr 2019, at 23:26, Emmanuel Vadot <manu at bidouilliste.com>
>>> wrote:
>>>
>>> On Tue, 16 Apr 2019 09:16:02 +0300
>>> Daniel Braniss <danny at cs.huji.ac.il <mailto:danny at cs.huji.ac.il>>
>>> wrote:
>>>
>>>>
>>>>
>>>>> On 11 Apr 2019, at 09:56, Daniel Braniss <danny at cs.huji.ac.il>
>>>>> wrote:
>>>>>
>>>>> if no device is connected, I2CRDWR hangs,
>>>>> it also happens with i2c(8) -s, only reboot helps.
>>>>>
>>>>> ichb1: twsi_reset: Using IIC_FASTEST/UNKNOWN mode with speed
>>>>> param=2a
>>>>> iichb1: TWSI_WRITE: Writing 0 to 18
>>>>> iichb1: TWSI_WRITE: Writing 2a to 14
>>>>> iichb1: TWSI_WRITE: Writing 40 to c
>>>>> iichb1: TWSI_WRITE: Writing c4 to c
>>>>> iichb1: twsi_transfer: transmitting 2 messages
>>>>> iichb1: TWSI_READ: read f8 from 10
>>>>> iichb1: twsi_transfer: status=f8
>>>>> iichb1: twsi_transfer: msg[0] flags: 0
>>>>> iichb1: twsi_transfer: msg[0] len: 9
>>>>> iichb1: TWSI_WRITE: Writing e4 to c
>>>>>
>>>>> and now it?s hung
>>>>
>>>> [?]
>>>
>>> I don't see that on my OrangePi One or Pine64-LTS.
>>
>> well, mine is are Nanopi Neo, maybe it’s a dts issue?
>> I also have a orangepi-zero but it will take me some time to make
>> a sdcard
I managed to boot my OrangePi Zero, and i2c -s has no issues, does not hang.
still, with the latest (r346368) my NanoPi Neo hangs when no i2c device is present,
so what is the difference? or where can I look?
>>>
>>>>
>>>> even with a working device, this happens sometimes:
>>>>
>>>> my app gets ENXIO from the ioctl(fd, I2CRDWR, &data) and on the
>>>> console:
>>>> ?
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 29 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 29 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 29 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 29 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 38 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 29 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 29 on CPU2
>>>> gic0: Spurious interrupt detected: last irq: 29 on CPU2
>>>>
>>>> the good news: my app is killable :-)
>>>
>>> I would need more details for this.
>>
>> it was caused by i2c issues - the cable was a bit too long.
>> BTW, does changing the frequency work? ie dev.iicbus.0.frequency
>
> It looks like that driver does not honor the frequency sysctl/tunable.
>
> You can often compensate for a too-long cable by adding some stronger
> pullups. It's typical for a SOM to have pullups in the 4.7K range on
> i2c. You can add your own 1K pullups to see if that helps the rise
> times on the bus.
well, at the moment it works ok with a 6m cable, i’ll try your suggestion soon.
>
> -- Ian
>
cheers,
danny
More information about the freebsd-arm
mailing list