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:
parent
8bf7f603ae
commit
a69a4e23f4
|
@ -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();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue