瀏覽代碼

update i2c_scan.

vandoul 2 年之前
父節點
當前提交
80e8b97663
共有 3 個文件被更改,包括 46 次插入20 次删除
  1. 22 1
      src/i2c_tools.cpp
  2. 23 18
      src/i2c_utils.cpp
  3. 1 1
      src/i2c_utils.h

+ 22 - 1
src/i2c_tools.cpp

@@ -20,7 +20,28 @@ static void i2c(int argc,char *argv[])
 
         if(!strcmp(argv[ARG_CMD_POS], "scan"))
         {
-            i2c_scan();
+            rt_uint8_t start_addr = 0x00;
+            rt_uint8_t stop_addr = 0x80;
+        #ifdef I2C_TOOLS_USE_SW_I2C
+            if(argc >= 5)
+            {
+                start_addr = strtonum(argv[4]);
+                if(argc > 5)
+                {
+                    stop_addr = strtonum(argv[5]);
+                }
+            }
+        #else
+            if(argc >= 4)
+            {
+                start_addr = strtonum(argv[3]);
+                if(argc > 4)
+                {
+                    stop_addr = strtonum(argv[4]);
+                }
+            }
+        #endif
+            i2c_scan(start_addr, stop_addr);
             return;
         }
 

+ 23 - 18
src/i2c_utils.cpp

@@ -27,11 +27,11 @@ void i2c_help()
     rt_kprintf("i2c tools help:\n");
     rt_kprintf("---------------\n");
 #ifdef I2C_TOOLS_USE_SW_I2C
-    rt_kprintf("i2c scan  pin_sda pin_scl\n");
+    rt_kprintf("i2c scan  pin_sda pin_scl [start addr [stop addr]]\n");
     rt_kprintf("i2c read  pin_sda pin_scl address  register  [len=1]\n");
     rt_kprintf("i2c write pin_sda pin_scl address [register] data_0 data_1 ...\n\n");
 #else
-    rt_kprintf("i2c scan  bus_name\n");
+    rt_kprintf("i2c scan  bus_name [start addr [stop addr]]\n");
     rt_kprintf("i2c read  bus_name address  register  [len=1]\n");
     rt_kprintf("i2c write bus_name address [register] data_0 data_1 ...\n\n");
 #endif
@@ -129,25 +129,30 @@ rt_uint8_t i2c_read(rt_uint8_t addr, rt_uint8_t reg, rt_uint8_t* buffer, rt_uint
     #endif
 }
 
-void i2c_scan()
+void i2c_scan(rt_uint8_t start_addr, rt_uint8_t stop_addr)
 {
-    rt_kprintf("     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f\n");
-    for(unsigned char i=0; i<8; i++)
+    rt_kputs("    00 01  2 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F");
+    rt_uint8_t pos = start_addr & 0xF;
+    for(; pos < stop_addr; pos++)
     {
-        rt_kprintf("%d0: ", i);
-        for(unsigned char j=0; j<16; j++)
+        if((pos & 0xF) == 0)
         {
-            char addr = i*16+j;
-            if( i2c_probe(addr) == 1)
-            {
-                rt_kprintf("%02X", addr);
-            }
-            else
-            {
-                rt_kprintf("--");
-            }
-            rt_kprintf(" ");
+            rt_kprintf("\n%02X: ", pos);
         }
-        rt_kprintf("\n");
+        if(pos < start_addr)
+        {
+            rt_kputs("   ");
+            continue;
+        }
+        if( i2c_probe(pos) == 1)
+        {
+            rt_kprintf("%02X", pos);
+        }
+        else
+        {
+            rt_kputs("--");
+        }
+        rt_kputs(" ");
     }
+    rt_kputs("\n");
 }

+ 1 - 1
src/i2c_utils.h

@@ -38,7 +38,7 @@ void i2c_help();
 #endif
 
 int  i2c_probe(char addr);
-void i2c_scan();
+void i2c_scan(rt_uint8_t start_addr, rt_uint8_t stop_addr);
 
 rt_bool_t  i2c_write(char addr, rt_uint8_t* data, int len);
 rt_uint8_t i2c_read(rt_uint8_t addr, rt_uint8_t reg, rt_uint8_t* buffer, rt_uint8_t len);