Overview

SPMOD_TOF(TOF module) uses VL53L0X .
SPMOD - TOF Introduction
- Using Sipeed-SPMOD interface(2.54mm * 8PIN ),unified MaixPy board interface
- Using SP-MOD I2C to communicate with TOF module
- ToF module:The VL53L0X sensor used in this module is an I2C interface and a long distance single point flight time measurement (ToF) sensor. It has high performance and high reliability,
- With the longest distance of 4m and the highest refresh rate of 50Hz
- With the red laser pointer, the laser is activated through XSHUT and connected by SP_MOD.
- Size:25.0*10*3.15mm
VL53L0X Introduction:
Features: |
--- |
Max ranging distance |
4000mm |
Refresh rate |
50Hz |
Measuring angle |
27° |
Communication Interface |
I2C |
Range of working temperature |
-40℃ - 80℃ |
Sleep Status of Current |
5uA |
Supply voltage of external power supply |
2.8~3.5V |
Supply current of external power supply |
Depends on the working conditions of the module, usually less than 20mA |
SPMOD_TOF pin description:
Pin |
Name |
Type |
Description |
|
1 |
GND |
G |
Ground |
2 |
IRQ |
I |
Interrupt input pin, connected to GPIO1 of VL53L0X |
3 |
NC |
NC |
Not connected |
4 |
SDA |
I/O |
Receive data signal |
5 |
3V3 |
V |
Power supply(3.3V) |
6 |
NC |
NC |
Not connected |
7 |
SHT |
I |
Xshutdown pin(active low) |
8 |
SCL |
I |
Transmit clock signal |

MCU:FUN(IO) |
SP_RFID |
I2C:SDA(IO_7) |
SDA |
NC(IO_15) |
NC |
NC(IO_20) |
IRQ |
NC(IO_21) |
NC |
GPIOHS(IO_8) |
SHT |
I2C:SCL(IO_6) |
SCL |
2.8~3.5V |
3.3V |
GND |
GND |

Usage
Process
- Initializatin
- Adjust(option)
- Get distance
C:
//set io mux
fpioa_set_function(VL53L0X_SCL, FUNC_I2C0_SCLK + VL53L0X_I2C_DEVICE * 2);
fpioa_set_function(VL53L0X_SDA, FUNC_I2C0_SDA + VL53L0X_I2C_DEVICE * 2);
fpioa_set_function(VL53L0X_SHT, FUNC_GPIOHS0 + VL53L0X_SHT);
gpiohs_set_drive_mode(VL53L0X_SHT, GPIO_DM_OUTPUT);
//i2c init
maix_i2c_init(VL53L0X_I2C_DEVICE, 7, VL53L0X_I2C_FREQ_KHZ * 1000);
while (vl53l0x_init(&vl53l0x_dev)) {
printf("VL53L0X init error!!!\r\n");
msleep(500);
}
printf("VL53L0X init success!\r\n");
// adjusting
printf("VL53L0X adjusting\r\n");
vl53l0x_calibration_test(&vl53l0x_dev);
// get distance
printf("VL53L0X start work\r\n");
vl53l0x_general_test(&vl53l0x_dev);
MaixPy:
```python| 工作电压 | 2.6V~3.5V (选用红色激光时: 2.8V~3.3V) |
fm.register(VL53L0X_SHT, fm.fpioa.GPIOHS0, force=True)
XSHUT = GPIO(GPIO.GPIOHS0, GPIO.OUT)
i2c = I2C(VL53L0X_I2C_NUM, freq=VL53L0X_FREQ, scl=VL53L0X_SCL, sda=VL53L0X_SDA)
# create obj and read distance
tof = VL53L0X(i2c)
while True:
mm = tof.read()
utime.sleep_ms(100)
print(mm)
## Runtime enviroments
| Language | Boards | SDK/firmware version |
| :------: | :------: | :----------------------------: |
| C | MaixCube | kendryte-standalone-sdk v0.5.6 |
| MaixPy | MaixCube | maixpy v0.5.1 |
### Result
* C
<img src="../../assets/spmod/spmod_tof/log_c.png" height="200" />
* MaixPy
- [None]
## Transplant
Modify the following parameters to fit other K210 boards.
* C
```c
// board_config.h
#define VL53L0X_I2C_DEVICE 0 // i2c device number
#define VL53L0X_I2C_FREQ_KHZ 100 // i2c frequence
#define VL53L0X_SCL 6 // scl
#define VL53L0X_SDA 7 // sda
#define VL53L0X_SHT 8 // sht
################### config ###################
VL53L0X_I2C_NUM = const(I2C.I2C0)
VL53L0X_FREQ = const(100000)
VL53L0X_SCL = const(6)
VL53L0X_SDA = const(7)
VL53L0X_SHT = const(8)
##############################################
Outlook

Resource Link