Jump to content

    
Sign in to follow this  
taoga

smbus в linux

Recommended Posts

Здраствуйте!

 

Имеется bq40z60evm http://www.ti.com/product/bq40z60?keyMatch...h-EN-Everything - полный менеджер батареи(батарей): зарядка, защита, контроль состояния. Для связи есть smbus.

Зарядил от нее 3S2P сборку батарей типоразмера 18650. Запитал SBC. С помощью ПО bqstudio можно контролировать,

и изменять параметры микросхемы bq40z60, они сохраняются во флэш. Здесь вопросов почти нет.

 

Далее мне нужно контролировать bq40z60 из Linux(ubuntu 14.04 linaro с lxde). На борде есть i2c, подсоединяю и нечего не вижу.

i2cdetect не видит адресов bq40z60. Т.е. bq40z60 отсоединено или подсоединено, вывод i2cdetect остается одним и тем же.

 

linaro@linaro-alip:~$ ls /dev

autofs loop7 ram13 tty12 tty4 ttymxc0

block mem ram14 tty13 tty40 ttymxc1

bus mtd0 ram15 tty14 tty41 ttymxc4

char mtd0ro ram2 tty15 tty42 ubi_ctrl

console mtd1 ram3 tty16 tty43 urandom

core mtd1ro ram4 tty17 tty44 v4l

cpu_dma_latency mtd2 ram5 tty18 tty45 vcs

disk mtd2ro ram6 tty19 tty46 vcs1

dri mtdblock0 ram7 tty2 tty47 vcs2

fb0 mtdblock1 ram8 tty20 tty48 vcs3

fb1 mtdblock2 ram9 tty21 tty49 vcs4

fd mxc_asrc random tty22 tty5 vcs5

full mxc_hdmi rfkill tty23 tty50 vcs6

fuse mxc_hdmi_cec rtc tty24 tty51 vcs7

galcore mxc_ipu rtc0 tty25 tty52 vcsa

hwrng mxc_vpu rtc1 tty26 tty53 vcsa1

i2c-0 mxs_viim sda tty27 tty54 vcsa2

i2c-1 network_latency sda1 tty28 tty55 vcsa3

i2c-2 network_throughput sdb tty29 tty56 vcsa4

input null sdb1 tty3 tty57 vcsa5

kmsg port shm tty30 tty58 vcsa6

log pps0 snd tty31 tty59 vcsa7

loop-control ptmx stderr tty32 tty6 vga_arbiter

loop0 ptp0 stdin tty33 tty60 video0

loop1 pts stdout tty34 tty61 video1

loop2 ram0 tty tty35 tty62 video16

loop3 ram1 tty0 tty36 tty63 video17

loop4 ram10 tty1 tty37 tty7 watchdog

loop5 ram11 tty10 tty38 tty8 zero

loop6 ram12 tty11 tty39 tty9

 

linaro@linaro-alip:~$ i2cdetect -l i2c-0 i2c

i2c-0 unknown 21a0000.i2c N/A

i2c-1 unknown 21a4000.i2c N/A

i2c-2 unknown 21a8000.i2c N/A

 

linaro@linaro-alip:~$ sudo i2cdetect -y 0

0 1 2 3 4 5 6 7 8 9 a b c d e f

00: -- -- -- -- -- -- -- -- -- -- -- -- --

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

20: UU 21 -- UU -- -- -- -- -- UU -- -- -- -- -- --

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

50: UU UU UU UU -- -- -- -- -- -- -- -- -- -- -- --

60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --

70: -- -- -- -- -- -- -- --

 

linaro@linaro-alip:~$ sudo i2cdetect -y 1

0 1 2 3 4 5 6 7 8 9 a b c d e f

00: -- -- -- -- -- UU -- -- -- -- -- -- --

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3f

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

50: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- --

60: -- -- -- -- -- -- -- -- -- -- -- 6b -- -- -- --

70: -- -- -- -- -- -- -- --

 

linaro@linaro-alip:~$ sudo i2cdetect -y 2

0 1 2 3 4 5 6 7 8 9 a b c d e f

00: -- UU -- -- -- -- -- UU -- -- -- -- --

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU --

20: UU -- -- -- -- -- -- -- -- -- UU -- -- -- -- --

30: -- -- -- -- UU 35 -- -- -- -- -- -- -- -- -- --

40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --

50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

70: -- -- -- -- -- -- -- --

 

От bq40z60 и Linux мне нужно несколько вещей:

1) Переходить в спящий режим (из bqstudio это команда shutdown );

2) Просыпаться из спящего режима (есть кнопка wake up на bq40z60evm);

3) Отображать индикатор состояния батареи;

4) Отображать текущий источник питания( батарея или сетевой адаптер);

 

Кто нибудь имел дело с smbus и с подобными микросхемами в linux?

Как настроить это в Linux, подскажите куда копать?

log.txt

Share this post


Link to post
Share on other sites
Далее мне нужно контролировать bq40z60 из Linux(ubuntu 14.04 linaro с lxde). На борде есть i2c, подсоединяю и нечего не вижу.

i2cdetect не видит адресов bq40z60. Т.е. bq40z60 отсоединено или подсоединено, вывод i2cdetect остается одним и тем же.

вы не перепутали SDA<>SCL?

gnd подсоединили?

 

судя по выхлопу i2cdetect физически сами шины исправны

и если перед подключением вы не загнали чип в shutdown, то он должен детектироваться примерно по адресу 0x09, 0x0b или 0x12..

 

Кто нибудь имел дело с smbus и с подобными микросхемами в linux?

Как настроить это в Linux, подскажите куда копать?

общие рекомендации:

добиваетесь того, чтобы чип продетектировался утилитой i2cdetect

утилитами i2cset/i2cget "изучаете регистры чипа и его поведение

вооружившись рефманом на чип (Technical Reference Manual (SLUUA04)), пишете драйвер для своего ядра в разделе drivers/power

Edited by Jury093

Share this post


Link to post
Share on other sites
вы не перепутали SDA<>SCL?

gnd подсоединили?

 

судя по выхлопу i2cdetect физически сами шины исправны

и если перед подключением вы не загнали чип в shutdown, то он должен детектироваться примерно по адресу 0x09, 0x0b или 0x12..

 

 

общие рекомендации:

добиваетесь того, чтобы чип продетектировался утилитой i2cdetect

утилитами i2cset/i2cget "изучаете регистры чипа и его поведение

вооружившись рефманом на чип (Technical Reference Manual (SLUUA04)), пишете драйвер для своего ядра в разделе drivers/power

Не перепутал, раза 3 проверял. И прозванивал. На обе платы(SBC и bq40z60evm) нанесена маркировка контактов. Подключал SDA, SCL, GND.

Далее начал экспериментировать с настройками bq40z60 и почти убил ее.

Сделал вот что:

Последние изменения конфигурации bq40z60:

in "SBS Configuration" - XL = 1(red), HPE=1, CPE=1, BCAST=1

Эти биты включают обмен на 400кГц и периодическую отправку информационных сообщений.

После чего Bqstudio перестало автоматически определять bq40z60evm. Использую EV2300.

Выбираю вручную bq40z60, в окне "Battery Management Studio() Supported Target"

Очень редко проходят команды: "DEVICE_NUMBER", "CHEM_ID", "RESET" ...

"CHEM_ID" - возвращает правильное значение.

Если включить в Bqstudio автоматическое чтение регистров, то иногда читаются достоверные значения регистров! Очень редко.

Т.е. линии smbus целые.

 

Пробовал залить сохраненный ранее srec в окне "F / W Programming" но возникают ошибки: "Program Srec: Timeout or unexpected response communicating wi

th device" или "Program Srec: Packet checksum mismatch"

Очень редко появляется индикатор прогресса "F / W Programming" но вероятно прошивка не завершается, т.к. появляется ошибка: "Execute Command: Timeout or unexpected response communicating with device".

Странно, что они не сделали сброс значений параметров с помощью внешней ножки.

 

В итоге bq40z60 наполовину живая. Работает по старым настройкам. Заряжает батарею, реагирует на внешний источник питания, показывает с помощью светодиодов заряд. Но начего больше с ней сделать не могу. Заказал еще несколько новых микросхем, будем чинить EVM.

Share this post


Link to post
Share on other sites
Не перепутал, раза 3 проверял. И прозванивал. На обе платы(SBC и bq40z60evm) нанесена маркировка контактов. Подключал SDA, SCL, GND.

а что такое SBC? плата хоста, куда цепляете bq40z60?

 

in "SBS Configuration" - XL = 1(red), HPE=1, CPE=1, BCAST=1

Эти биты включают обмен на 400кГц и периодическую отправку информационных сообщений.

После чего Bqstudio перестало автоматически определять bq40z60evm. Использую EV2300.

попробуйте зайти хоть в ручном режиме и почистить на исходную XL, HPE, CPE

тут есть два варианта:

- считать память регистров и там поправить, потом обратно записать

- в расширенном режиме есть возможность посылать отдельные команды, вот там попробовать обнулить те же биты..

 

потом команду сброса чипа, либо через гуевую кнопку, либо через команду расширенного режима..

 

Share this post


Link to post
Share on other sites
а что такое SBC? плата хоста, куда цепляете bq40z60?

 

 

попробуйте зайти хоть в ручном режиме и почистить на исходную XL, HPE, CPE

тут есть два варианта:

- считать память регистров и там поправить, потом обратно записать

- в расширенном режиме есть возможность посылать отдельные команды, вот там попробовать обнулить те же биты..

 

потом команду сброса чипа, либо через гуевую кнопку, либо через команду расширенного режима..

SBC - это Gateworks GW5400 (Ventana). Про то чтобы с помощью отдельной команды в расширенном режиме изменить значения регистра конфигурации я думал, но пока не совсем додумал.http://electronix.ru/forum/style_emoticons/default/laughing.gif. Попробую. Мне показалась, что bqStudio слишком агрессивно работает по интерфейсу, пытаясь связаться с EVM.

Еще была мысль к другой плате отладочной подсоединить, у меня есть Atmel'ая. И тоже командой поменять значения этого регистра.

Share this post


Link to post
Share on other sites
SBC - это Gateworks GW5400 (Ventana).

глянул в инете - хорошая машинка, на imx6, жаль памяти всего 1Г, да и число minipcie явно избыточно, а так хорошо выглядит..

 

Про то чтобы с помощью отдельной команды в расширенном режиме изменить значения регистра конфигурации я думал, но пока не совсем додумал.http://electronix.ru/forum/style_emoticons/default/laughing.gif. Попробую. Мне показалась, что bqStudio слишком агрессивно работает по интерфейсу, пытаясь связаться с EVM.

в студии можно выключить активность - левая панель (дашборд), она ломится на интерфейс, вот ее и выключить..

дальше самому настойчиво исправить биты, если конечно в них дело.. ваша bq40z60 должна уметь fast-i2c, а вот за em2300 я не уверен.. еще может PEC (включенный) добавляет, причем я не удивлюсь, если писатели bqstudio не учли такой расклад..

для надежности перед сеансом пощелкайте кнопкой wakeup с поданным внешним питанием

 

Еще была мысль к другой плате отладочной подсоединить, у меня есть Atmel'ая. И тоже командой поменять значения этого регистра.

я бы не стал - лучше все же использовать заведомо совместимое оборудование и софт..

Share this post


Link to post
Share on other sites
глянул в инете - хорошая машинка, на imx6, жаль памяти всего 1Г, да и число minipcie явно избыточно, а так хорошо выглядит..

 

 

в студии можно выключить активность - левая панель (дашборд), она ломится на интерфейс, вот ее и выключить..

дальше самому настойчиво исправить биты, если конечно в них дело.. ваша bq40z60 должна уметь fast-i2c, а вот за em2300 я не уверен.. еще может PEC (включенный) добавляет, причем я не удивлюсь, если писатели bqstudio не учли такой расклад..

для надежности перед сеансом пощелкайте кнопкой wakeup с поданным внешним питанием

 

 

я бы не стал - лучше все же использовать заведомо совместимое оборудование и софт..

GW5404 - c 2Гб памяти.

Из-за большого количества pci-e и наличия видео она нам и нужна.

Недавно рекламу кинули: GW11036 Embedded Android Development Kit - тоже на imx6, но с 1Гб памяти.

Но почему-то в этом ките нет батареи. Я им задал вопрос. Они мне ответили, что батарея не проблема, т.к. входное напряжение от 8 до 60В.

С помощью GSC (gateworks system controller) можно переводить борду в спящий режим, просыпаться по нажатию кнопки или по таймеру, также можно получить значение входного напряжение. Скрипты для Linux в описании GSC.

 

По bq40z60:

Отключил активность. Попробовал послать команду (для пробы) из режима "Advanced comm SMB" - c n-ой попытки удалось. Только вот не нашел в документации кодов команд с помощью которых можно записать значение "SBS Configuration". Нашел описание для bq20z70, но там формат регистров конфигурации не такой, и скорее всего адреса отличаются. Попросил помочь с командой на форуме TI e2e.

Share this post


Link to post
Share on other sites
GW5404 - c 2Гб памяти.

Из-за большого количества pci-e и наличия видео она нам и нужна.

Недавно рекламу кинули: GW11036 Embedded Android Development Kit - тоже на imx6, но с 1Гб памяти.

Но почему-то в этом ките нет батареи. Я им задал вопрос. Они мне ответили, что батарея не проблема, т.к. входное напряжение от 8 до 60В.

система на imx6q, с подключенной sata и поднятой мультимедийностью прилично кушает и ваш вариант 2p3s вполне потянет такую нагрузку..

если что, то вполне можно на 3p3s перекрутить..

 

По bq40z60:

Отключил активность. Попробовал послать команду (для пробы) из режима "Advanced comm SMB" - c n-ой попытки удалось. Только вот не нашел в документации кодов команд с помощью которых можно записать значение "SBS Configuration". Нашел описание для bq20z70, но там формат регистров конфигурации не такой, и скорее всего адреса отличаются. Попросил помочь с командой на форуме TI e2e.

пока Томас размышляет, попробуйте все же подолбить по алгоритму:

- ручная загрузка

- открываете вкладку "view->data memory"

- там сбрасываете биты на исходную

- и настойчиво на кнопку "Write all"

идея в том, что студия будет не все подряд перезаписывать, а только измененные значения, и шансы на запись значительно увеличатся..

если удалось перезаписать, то в правой колонке жмите кнопку "Reset"

Share this post


Link to post
Share on other sites
система на imx6q, с подключенной sata и поднятой мультимедийностью прилично кушает и ваш вариант 2p3s вполне потянет такую нагрузку..

если что, то вполне можно на 3p3s перекрутить..

 

 

пока Томас размышляет, попробуйте все же подолбить по алгоритму:

- ручная загрузка

- открываете вкладку "view->data memory"

- там сбрасываете биты на исходную

- и настойчиво на кнопку "Write all"

идея в том, что студия будет не все подряд перезаписывать, а только измененные значения, и шансы на запись значительно увеличатся..

если удалось перезаписать, то в правой колонке жмите кнопку "Reset"

Пока не выполнится удачно Read All (а он не выполняется, полдня долбил) недоступны команды Write All, Import, Export. Write to data memory не выполняется по той-же причине и выдает ошибку "Operation failed because initial read of all data flash failed". Остаются только: команда из расширенного режима для записи нового значения регистра конфигурации или перепайка микросхемы.

Share this post


Link to post
Share on other sites
Пока не выполнится удачно Read All (а он не выполняется, полдня долбил) недоступны команды Write All, Import, Export. Write to data memory не выполняется по той-же причине и выдает ошибку "Operation failed because initial read of all data flash failed". Остаются только: команда из расширенного режима для записи нового значения регистра конфигурации или перепайка микросхемы.

ну хорошо.. а что у вас считывается старт-студии->view->data-memory->setting->sbs-configuration?

есть ли там что осмысленное?

если есть, то мышкой тыкаете прямо в значение (value) и должно появиться битовое поле, подсвеченное красными и зелеными квадратами..

попробуйте там почистить и тут же есть кнопка записи, может это поможет (при попытке записи смотрите в левый нижний угол студии, там показывают ошибки)

если пройдет, то далее Reset..

Share this post


Link to post
Share on other sites
ну хорошо.. а что у вас считывается старт-студии->view->data-memory->setting->sbs-configuration?

есть ли там что осмысленное?

если есть, то мышкой тыкаете прямо в значение (value) и должно появиться битовое поле, подсвеченное красными и зелеными квадратами..

попробуйте там почистить и тут же есть кнопка записи, может это поможет (при попытке записи смотрите в левый нижний угол студии, там показывают ошибки)

если пройдет, то далее Reset..

Ничего не считывается, ячейки значений пустые. Я ж говорю не выполняется команда Read All. Когда тыкаешь во вкладку data memory программа скорее всего автоматом запускает Read All, после удачного выполнения которой появляются значения.

У меня их нет, пусто. Соответственно изменить отдельные значения регистров тоже не дает. Выдает ошибку, что сначала значения должны быть считаны. Я пробовал это делать, открывал старт-студии->view->data-memory->setting->sbs-configuration тыкал в нее, устанавливал зеленые квадраты(0) во все поля которые я менял, потом нажимал на кнопку write и появлялась ошибка, что сначала значения должны быть считаны.

Share this post


Link to post
Share on other sites
Ничего не считывается, ячейки значений пустые. Я ж говорю не выполняется команда Read All. Когда тыкаешь во вкладку data memory программа скорее всего автоматом запускает Read All, после удачного выполнения которой появляются значения.

У меня их нет, пусто. Соответственно изменить отдельные значения регистров тоже не дает. Выдает ошибку, что сначала значения должны быть считаны. Я пробовал это делать, открывал старт-студии->view->data-memory->setting->sbs-configuration тыкал в нее, устанавливал зеленые квадраты(0) во все поля которые я менял, потом нажимал на кнопку write и появлялась ошибка, что сначала значения должны быть считаны.

жаль..

я почитал раздел по работе через Advanced Comm SMB - там все сильно мутно и не совпадает с реалиями программы. К сожалению у Техаса это в порядке вещей. Сначала пишут софт, потом доки на чипы, потом рефейсят софт а в доках изменения не отражают. потом приходится сидеть и разгадывать шарады.

 

на всякий случай, проверьте чем-нить, что у вас железо не попортилось - мультиметром, а лучше осциллом, надо проверить, что уровни sda/scl больше 3в.. а то мало ли, провод переломился или контакт погнулся в разъеме.. осцилл покажет жизнедеятельность на i2c (надеюсь, что статика - не ваш случай, т.б. там все защитами обвешанно)..

 

и еще, покопайтесь на их форуме, мне помниться, что я видел там объяснения, как работать с закладкой Advanced (то ли на форуме, то ли в доках, точнее не скажу)

Share this post


Link to post
Share on other sites

вроде как с чтением куска флеша я чего-то получил, читаем ман:

Read from DF example:
Taking the same assuming from the read DF example, to read DF,
a. Send SMBus write block with command 0x44, block = 0x00 + 0x40
b. Send SMBus read block with command 0x44
The returned block = a starting address + 32 bytes of DF data
= 0x00 + 0x40 + data1_LowByte + data1_HighByte + data2_LowByte + data2_HighByte....
data32_LowByte + data32_HighByte

 

сначала запись блока командой 0x44 и адрес разбитый на две байта с обратным написанием (надо 0x47c9 пишу c9 47)

потом считываю блок командой 0x44

вижу ожидаемое 0x31 - это мои бродкасты и максимальный таймаут..

 

а вот как записать, пока идей нет - будем на вашем чипе тренироваться :)

может надо скопипастить весь блок, поправить нужные параметры и записать, а может как-то по другому..

post-13050-1442582783_thumb.jpg

Share this post


Link to post
Share on other sites
вроде как с чтением куска флеша я чего-то получил, читаем ман:

Read from DF example:
Taking the same assuming from the read DF example, to read DF,
a. Send SMBus write block with command 0x44, block = 0x00 + 0x40
b. Send SMBus read block with command 0x44
The returned block = a starting address + 32 bytes of DF data
= 0x00 + 0x40 + data1_LowByte + data1_HighByte + data2_LowByte + data2_HighByte....
data32_LowByte + data32_HighByte

 

сначала запись блока командой 0x44 и адрес разбитый на две байта с обратным написанием (надо 0x47c9 пишу c9 47)

потом считываю блок командой 0x44

вижу ожидаемое 0x31 - это мои бродкасты и максимальный таймаут..

 

а вот как записать, пока идей нет - будем на вашем чипе тренироваться :)

может надо скопипастить весь блок, поправить нужные параметры и записать, а может как-то по другому..

 

Спасибо, мне и Том ответил. В понедельник попробую.

Share this post


Link to post
Share on other sites
Спасибо, мне и Том ответил. В понедельник попробую.

Помогло. Сначала пытался считать. Но безрезультатно.

Потом до победного слал команду запись блока 44 c данными C9 47 20.

После того как команда прошла, передернул питание evm(включая батарею).

Bqstudio стала снова автоматически определять bq40z60.

Также мне стало понятно где найти адреса регистров конфигурации.

Нажно открыть окно Preferences (Меню Window->Preferences).

Затем установить флаг "Show Advanced Views" в ветке "All Global Settings".

После чего в в окне "Data Memory" появились адреса регистров flash.

 

Спасибо.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this