Optimize initialization of PMW3360 Sensor (#15821)

This commit is contained in:
Drashna Jaelre 2022-01-10 14:57:36 -08:00 committed by GitHub
parent 2fbdfae4b7
commit ec7c3ac12d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 7 deletions

View File

@ -150,7 +150,8 @@ The PMW 3360 is an SPI driven optical sensor, that uses a built in IR LED for su
|`PMW3360_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` | |`PMW3360_SPI_MODE` | (Optional) Sets the SPI Mode for the sensor. | `3` |
|`PMW3360_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ | |`PMW3360_SPI_DIVISOR` | (Optional) Sets the SPI Divisor used for SPI communication. | _varies_ |
|`PMW3360_LIFTOFF_DISTANCE` | (Optional) Sets the lift off distance at run time | `0x02` | |`PMW3360_LIFTOFF_DISTANCE` | (Optional) Sets the lift off distance at run time | `0x02` |
|`ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 30 degrees directly in the sensor. | `0` | |`ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 127 degrees directly in the sensor. | `0` |
|`PMW3360_LEGACY_FIRMWARE_UPLOAD` | (Optional) Switches to older, manual upload of firmware, for compatibility. | _not defined_ |
The CPI range is 100-12000, in increments of 100. Defaults to 1600 CPI. The CPI range is 100-12000, in increments of 100. Defaults to 1600 CPI.

View File

@ -209,12 +209,16 @@ void pmw3360_upload_firmware(void) {
spi_write(REG_SROM_Load_Burst | 0x80); spi_write(REG_SROM_Load_Burst | 0x80);
wait_us(15); wait_us(15);
#ifdef PMW3360_LEGACY_FIRMWARE_UPLOAD
unsigned char c; unsigned char c;
for (int i = 0; i < FIRMWARE_LENGTH; i++) { for (int i = 0; i < FIRMWARE_LENGTH; i++) {
c = (unsigned char)pgm_read_byte(firmware_data + i); c = (unsigned char)pgm_read_byte(firmware_data + i);
spi_write(c); spi_write(c);
wait_us(15); wait_us(15);
} }
#else
spi_transmit(firmware_data, sizeof(firmware_data));
#endif
wait_us(200); wait_us(200);
pmw3360_read(REG_SROM_ID); pmw3360_read(REG_SROM_ID);