Jump to content

    
Sign in to follow this  
slava2005

I2C и SPI - как использовать под Линуксом ?

Recommended Posts

Вообщем опять у меня вопрос - хочу общаться с вышеуказанными интерфейсами. Желательно из шелла.

 

Подскажите направление поиска ...

Share this post


Link to post
Share on other sites
Вообщем опять у меня вопрос - хочу общаться с вышеуказанными интерфейсами. Желательно из шелла.

 

Подскажите направление поиска ...

 

Работаю с i2c через ioctl /dev/i2c (c 89 0), spi не пользую

Share this post


Link to post
Share on other sites

как устроийство SPI видно, из под консоли у вас под Linux не густо средств чтобы поработать с устройисвами, можно записать, считать

 

Пример использования последовательной flash, подцепленной к SPI интерфейсу лежит на:

http://www.heavy-online.ru/arm-linux/

Share this post


Link to post
Share on other sites

2 dch

 

Интересует нечто вроде программы gpio для чтения/записи состояния выводов general purpose input /output процессора ( см. http://electronix.ru/forum/index.php?showtopic=34444 ) , но только для интерфейсов i2c и spi процессора AT91RM9200 - средство, которое можно было бы использовать вместе с платой Rainbow для подключения к другим устройствам в качестве логического анализотора их i2c, spi интерфейсов.

Это теоретически. Практически видна опасность повреждения DataFlash на плате Rainbow при подключении к интерфейсу spi процессора случайного потока данных. Но против этого можно принять меры аппаратного характера.

 

P.S. В описании u-boot'a такие средства для i2c и spi вроде бы есть, но в том варианте u-boot, который пропатчен в соотвестввии с http://www.heavy-online.ru/arm-linux/ этого нет. Надо будет как-нибудь попробовать собрать u-boot с поддержкой этих тестовых функций.

Edited by Vishay

Share this post


Link to post
Share on other sites
P.S. В описании u-boot'a такие средства для i2c и spi вроде бы есть, но в том варианте u-boot, который пропатчен в соотвестввии с http://www.heavy-online.ru/arm-linux/ этого нет.

Начиная с 1.1.1 в u-boot есть поддержка SPI flash - в конфигурационном файле нужно раскомментировать строчку. Даете коман дочку flinfo если SPI флэш не видна - лезете в конфигурационный файл.

Share this post


Link to post
Share on other sites

Фирма ST для поддержки своего выпускаемого железа содержит свой STLinux, и в документации на него есть примеры программ для работы с i2c и spi интерфейсами :

 

i2c:

http://www.stlinux.com/docs/manual/distrib...tion_guide6.php

 

spi:

http://www.stlinux.com/docs/manual/distrib...tion_guide7.php

Share this post


Link to post
Share on other sites

Для тренировки работы с i2c интерфейсом платы Rainbow я припаял к ней на проводках микросхему EEPROM M24256 фирмы ST с неким примерно известным запрограммированным до меня содержимым, с закороченными на землю адресными выводами ( адрес на шине i2c 0x50 ) и резистором 5 кОм на выводе /WC для защиты от записи.

Попробовал считать ее содержимое при помощи готовых средств Linux'а, для чего первоначально использовал ядро с поддержкой EEPROM - в каталоге /sys/bus/i2c/devices/0-0050/eeprom видны первые 256 байт EEPROM'а.

 

cat /sys/bus/i2c/devices/0-0050/eeprom | hexdump -C

 

Далее попробовал почитать другие адреса EEPOMa при помощи утилит из пакета lm-sensors: i2cdump считала те-же 256 байт, а выше по адресам считывала не совсем-то, что ожидалось.

 

i=0; /usr/sbin/i2cdump -y 0 0x50 c $i; while [ "$i" -le 128 ]; do echo "i=$i" ; /usr/sbin/i2cdump -y 0 0x50 c $i; let i+=1; done;

 

Для верификации содержимого EEPROMa пришлось считать его без Linux'а модифицированной программой BasicTWIEeprom из тестовых примеров для AT91RM9200 от Atmel (файл eeprom_read.zip).

 

Имея т.о точное содержимое EEPROMa в файле, я предпринял еще несколько попыток стандартными средствами Linux'a считать все содержимое EEPROM'a, но они оказались безуспешными.

 

Далее, я попробовал написать свою программу на Си для решения этой задачи ( файл i2c_program.zip ). Для еe работы необходимо ядро с выключенной поддержкой EEPROM, иначе в адреса 0x50 ... 0x57 шины i2c ничего нельзя записать при помощи вызова ioctl.

 

Вот скрипт, который я использую для создания устройства /dev/i2c и загрузки программы из компьютера в файловую систему платы Rainbow на ram-диске:

 

if [ ! -c "/dev/i2c" ] ; then mknod -m 600 /dev/i2c c 89 0 ; fi ; cd /home ; prgn="./i2c_program"; echo -e "binary\nget $prgn" | ./tftp 192.168.2.41 ; if [ -e $prgn ] ; then chmod 544 $prgn ; fi ; ls -l ;

 

Команда для запуска программы:

 

#./i2c_program 50 0 255

где параметры командной строки: address_i2c, mem_addr, nbytes.

 

 

P.S.

Начал я практическое изучение i2c - интерфейса под Linux-ом на плате Rainbow с такого скрипта:

mknod /dev/i2c c 89 0

ls -l /dev/i2c

dmesg > /dev/i2c

, но при просмотре сигналов интерфейса i2c в осциллограф выяснилось, что текст из dmesg пишется в i2c-адрес 0x7f. ):- .

i2c_program.zip

eeprom_read.zip

Edited by Vishay

Share this post


Link to post
Share on other sites
/sys/bus/i2c/devices/0-0050/eeprom видны первые 256 байт EEPROM'а.

 

cat /sys/bus/i2c/devices/0-0050/eeprom | hexdump -C

остальные части eeprom должны быть:

/sys/bus/i2c/devices/0-0051/eeprom

/sys/bus/i2c/devices/0-0052/eeprom

 

и так далее

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