contrib/firmware: extend the number of bytes to be sent in the i2c bit-banging read operation

Change-Id: Iaeb3d5ba37da1bd77d36ad0ebbc6b45c46860dec
Signed-off-by: Ahmed BOUDJELIDA <aboudjelida@nanoxplore.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/7810
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
Ahmed BOUDJELIDA 2023-10-16 11:04:16 +02:00 committed by Antonio Borneo
parent 8bf7f603ae
commit a69a4e23f4
1 changed files with 13 additions and 10 deletions

View File

@ -757,14 +757,13 @@ void i2c_recieve(void)
PIN_SDA_DIR = 0; PIN_SDA_DIR = 0;
if (EP6FIFOBUF[0] == 1) { if (EP6FIFOBUF[0] == 1) {
uint8_t rdwr = EP6FIFOBUF[0]; //read uint8_t rdwr = EP6FIFOBUF[0]; //read
uint8_t reg_adr_check = EP6FIFOBUF[1]; uint8_t data_count = EP6FIFOBUF[1]; //data sent count
uint8_t count = EP6FIFOBUF[2]; //request data count uint8_t count = EP6FIFOBUF[2]; //requested data count
uint8_t adr = EP6FIFOBUF[3]; //address uint8_t adr = EP6FIFOBUF[3]; //address
uint8_t reg_adr = EP6FIFOBUF[4];
uint8_t address = get_address(adr, rdwr); //address byte (read command) uint8_t address = get_address(adr, rdwr); //address byte (read command)
uint8_t address_2 = get_address(adr, 0); //address byte 2 (write command) uint8_t address_2 = get_address(adr, 0); //address byte 2 (write command)
printf("%d\n", address); printf("%d\n", address - 1);
/* start: */ /* start: */
start_cd(); start_cd();
@ -774,10 +773,12 @@ void i2c_recieve(void)
uint8_t ack = get_ack(); uint8_t ack = get_ack();
/* send data */ /* send data */
if (reg_adr_check) { //if there is a byte reg if (data_count) { //if there is a byte reg
send_byte(reg_adr); for (uint8_t i = 0; i < data_count; i++) {
/* ack(): */ send_byte(EP6FIFOBUF[i + 4]);
ack = get_ack(); /* ack(): */
ack = get_ack();
}
} }
/* repeated start: */ /* repeated start: */
@ -788,13 +789,15 @@ void i2c_recieve(void)
ack = get_ack(); ack = get_ack();
/* receive data */ /* receive data */
for (uint8_t i = 0; i < count; i++) { for (uint8_t i = 0; i < count - 1; i++) {
EP8FIFOBUF[i] = receive_byte(); EP8FIFOBUF[i] = receive_byte();
/* send ack: */ /* send ack: */
send_ack(); send_ack();
} }
EP8FIFOBUF[count - 1] = receive_byte();
/* stop */ /* stop */
stop_cd(); stop_cd();