Загрузка данных


JTAG:
device_id[0..4] = 0x43 0x10 0xF 0x1
IDCode : 10f1043
uint32_t Lattice::idCode()
{
	uint8_t device_id[4];
	const uint8_t idcode = (_fpga_family == ECP3_FAMILY) ? ECP3_IDCODE : READ_DEVICE_ID_CODE;
	wr_rd(idcode, NULL, 0, device_id, 4);
    printf("device_id[0..4] = 0x%X 0x%X 0x%X 0x%X\n",device_id[0],device_id[1],device_id[2],device_id[3]);
	return device_id[3] << 24 |
					device_id[2] << 16 |
					device_id[1] << 8  |
					device_id[0];
}

Status:
r[0]..r[7]=0x0 0x1E 0x0 0x0 0x1 0x10 0x0 0x0
Register raw value: 0x100100001e00
uint64_t Lattice::readStatusReg()
{
	uint64_t reg;
	uint8_t rx[8], tx[8];

	const int reg_len = get_statusreg_size() / 8;
	const uint8_t regcode = (_fpga_family == ECP3_FAMILY) ? ECP3_READ_STATUS_REGISTER : READ_STATUS_REGISTER;

	/* valgrind warn */
	memset(tx, 0, 8);
	memset(rx, 0, 8);
	wr_rd(regcode, tx, reg_len, rx, reg_len);
	_jtag->set_state(Jtag::RUN_TEST_IDLE);
	_jtag->toggleClk(1000);
	reg = (uint64_t) rx[7] << 56 | (uint64_t) rx[6] << 48 | (uint64_t) rx[5] << 40 | (uint64_t) rx[4] << 32 | rx[3] << 24 | rx[2] << 16 | rx[1] << 8 | rx[0];
        printf("%s(%d) reg=0x%X\n",__FUNCTION__,__LINE__,reg);
        printf("r[0]..r[7]=0x%X 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X\n",rx[0],rx[1],rx[2],rx[3],rx[4],rx[5],rx[6],rx[7]);
	return reg;
}

I2C:
static int sysconfig_read_idcode(struct sysconfig_priv *priv)
{
	const u8 lsc_idcode[] = SYSCONFIG_LSC_IDCODE;
	u8 buf[4] = {0};
	int ret;

        printk("%s(%d)\n",__FUNCTION__,__LINE__);
	ret = sysconfig_cmd_read(priv, lsc_idcode, sizeof(lsc_idcode),buf, sizeof(buf));
	if (ret)
		return ret;
        printk("%s(%d) 0x%X 0x%X 0x%X 0x%X ret=%d\n",__FUNCTION__,__LINE__,buf[0],buf[1],buf[2],buf[3],ret);
        return 0;
}

sysconfig_read_idcode(74) 0x01 0xF 0x10 0x43 ret=0

static int sysconfig_read_status(struct sysconfig_priv *priv, u64 *status)
{
	const u8 lsc_read_status[] = SYSCONFIG_LSC_READ_STATUS;
	u8 buf[8] = {0};
	int ret;

	ret = sysconfig_cmd_read(priv, lsc_read_status, sizeof(lsc_read_status),
				 buf, sizeof(buf));
	if (ret)
		return ret;

	*status = ((u64)buf[0] << 56 |(u64)buf[1] << 48 | (u64)buf[2] << 40 | (u64)buf[3] << 32 | (u64)buf[4] << 24 |(u64)buf[5] << 16 | (u64)buf[6] << 8 | buf[7]);

	return 0;
}
sysconfig_isc_enable(194) ret=0 status=0x40114800E0044B5

правильно ли я понимаю, что единственная разница это в том что у меня старший байт это buf[0] на I2C, а на JTAG buf[0] - младший байт?
Почему так сильно разнится значение статуса в обоих режимах???Может в этом проблема, что в режиме i2c что-то не так?