1
1

i2c-scan: добавлена опция -s

Этот коммит содержится в:
родитель 1036a12b0f
Коммит 1974eebdd1
3 изменённых файлов: 22 добавлений и 10 удалений

Просмотреть файл

@ -3,7 +3,7 @@
Сканер шины I2C и чтение/запись произвольного регистра I2C устройства. Сканер шины I2C и чтение/запись произвольного регистра I2C устройства.
### Синтаксис ### Синтаксис
```i2c-scan [-d устройство] [-f] [-a адрес] [-r смещение] [-w значение] [-c количество]]``` ```i2c-scan [-d устройство] [-f] [-s] [-a адрес] [-r смещение] [-w значение] [-c количество]```
### Опции ### Опции
- **-d устройство** - **-d устройство**
@ -29,10 +29,14 @@
- **-c количество** - **-c количество**
Количество регистров для чтения/записи. По умолчанию: 1. Количество регистров для чтения/записи. По умолчанию: 1.
- **-s**
Не пропускать сканирование специального адреса 0 (general call address).
### Описание ### Описание
Утилита i2c-scan сканирует шину I2C, последовательно перебирая доступные адреса (0-127), и выводит таблицу с присутствующими на шине устройствами. Утилита i2c-scan сканирует шину I2C, последовательно перебирая доступные адреса (1-127), и выводит таблицу с присутствующими на шине устройствами.
При задании адреса устройства на шине (опция -a) считывает указанное количество регистров (опция -c) со смещением, заданным опцией -r. При задании адреса устройства на шине (опция -a) считывает указанное количество регистров (опция -c) со смещением, заданным опцией -r.
@ -41,7 +45,7 @@
# i2c-scan                 # i2c-scan                
Scanning I2C device /dev/i2c0 for I2C devices... Scanning I2C device /dev/i2c0 for I2C devices...
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   00: xx -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
@ -54,7 +58,7 @@ Scanning done  
# i2c-scan -d /dev/i2c1    # i2c-scan -d /dev/i2c1   
Scanning I2C device /dev/i2c1 for I2C devices... Scanning I2C device /dev/i2c1 for I2C devices...
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   00: xx -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
10: -- -- -- -- -- -- -- -- 18 19 -- -- -- -- -- --   10: -- -- -- -- -- -- -- -- 18 19 -- -- -- -- -- --  
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --   30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  

Просмотреть файл

@ -7,6 +7,7 @@ Options:
-r Register offset -r Register offset
-w Value to write to the device -w Value to write to the device
-c Number of registers to read/write -c Number of registers to read/write
-s Don't skip zero (general call) address during scan
Examples: Examples:
Scan I2C 0 bus Scan I2C 0 bus

Просмотреть файл

@ -117,7 +117,7 @@ int write_i2c_register( int device_desc, int reg_num, uint8_t addr, uint16_t val
} }
void scan_i2c( int fd ) void scan_i2c( int fd, int skip_zero )
{ {
int i, j; int i, j;
@ -128,7 +128,9 @@ void scan_i2c( int fd )
fprintf( stderr, "%02x: ", j ); fprintf( stderr, "%02x: ", j );
for ( i = 0; i < 16 ; i++ ) for ( i = 0; i < 16 ; i++ )
{ {
if ( read_i2c_register( fd, 0, i + j ) >= 0 ) if ( skip_zero && (i + j) == 0 )
fprintf( stderr, "xx " );
else if ( read_i2c_register( fd, 0, i + j ) >= 0 )
fprintf( stderr, "%02x ", i + j ); fprintf( stderr, "%02x ", i + j );
else else
fprintf( stderr, "-- " ); fprintf( stderr, "-- " );
@ -149,9 +151,10 @@ int main( int argc, char **argv )
reg_num = 0, reg_num = 0,
addr = 0, addr = 0,
val, val,
register_count = 1; register_count = 1,
skip_zero = 1;
while ( (option = getopt( argc, argv, "d:a:r:c:w:f" )) != -1 ) while ( (option = getopt( argc, argv, "d:a:r:c:w:fs" )) != -1 )
{ {
switch ( option ) switch ( option )
{ {
@ -182,6 +185,10 @@ int main( int argc, char **argv )
utility_mode = UTILITY_MODE_FIND; utility_mode = UTILITY_MODE_FIND;
break; break;
case 's':
skip_zero = 0;
break;
default: default:
return (-1); return (-1);
} }
@ -199,7 +206,7 @@ int main( int argc, char **argv )
if ( utility_mode == UTILITY_MODE_FIND ) if ( utility_mode == UTILITY_MODE_FIND )
{ {
printf( "Scanning I2C device %s for I2C devices...\n", device_name ); printf( "Scanning I2C device %s for I2C devices...\n", device_name );
scan_i2c( device_desc ); scan_i2c( device_desc, skip_zero );
printf( "Scanning done \n" ); printf( "Scanning done \n" );
close( device_desc ); close( device_desc );
return (0); return (0);