utils/hw
utils
/
hw
1
1
Fork 0

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

This commit is contained in:
parent 1036a12b0f
commit 1974eebdd1
3 changed files with 22 additions and 10 deletions

View File

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

View File

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

View File

@ -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;
@ -128,7 +128,9 @@ void scan_i2c( int fd )
fprintf( stderr, "%02x: ", j );
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 );
else
fprintf( stderr, "-- " );
@ -149,9 +151,10 @@ int main( int argc, char **argv )
reg_num = 0,
addr = 0,
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 )
{
@ -182,6 +185,10 @@ int main( int argc, char **argv )
utility_mode = UTILITY_MODE_FIND;
break;
case 's':
skip_zero = 0;
break;
default:
return (-1);
}
@ -199,7 +206,7 @@ int main( int argc, char **argv )
if ( utility_mode == UTILITY_MODE_FIND )
{
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" );
close( device_desc );
return (0);