Проблема в следующем- пытаюсь работать с HMC 5883L в режиме автоинкремента адреса., софтовый i2C. Cами функии i2с работают на аналогичном хонейвелловском компасе ( HMC 6352) без проблем.
Cудя по даташиту после инициализации ( или просто после включения- по умолчанию стоит режим работы по запросу) надо просто подать адрес на чтение и потом 6 раз подряд прочитать данные.
то есть ST- DA- RD -RD-RD-RD-RD-RD-SP ( DA-divice adress, RD- read data, ST- start, SP- stop) Однако после этого алгоритма устройство "не отпускает" шину SDA.. и дальнейшее считывание превращается в мешанину импульсов Если перед этим принудительно командой записать адрес регистра (3), (ST-DA-RA-SP) то происходть то же самое.
Если я делаю стоп после одной регистровой пары ( (ST-DA-RA-SP) - задали адрес, затем прочитали 2 регистра подряд (ST- DA- RD -RD-SP), то устройство шину отпускает, но считанные данные в регистре не меняются . (они кажется и не должны меняться пока не прочитаешь подряд все регистры) (хотя данные в регистре правдоподобны)
|