从6.0.2升级到6.0.10

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
10个帖子/ 0新
最后一篇
Goutham.
离线
最后一次露面:1年11个月前
加入:2017-08-10 12:34
从6.0.2升级到6.0.10

你好团队,
我需要将代码从6.0.2到6.0.10版本移植,因为我现在正在使用AC Silicon芯片。我已经上传并成功地使用SDK 6.0.2中载了AB Silicon中的代码.Now我需要将其上传到AC Silicon芯片。我可以直接获得升级吗?

谢谢,
Goutham.

设备:
PM_DIALOG.
在线的
最后一次露面:4分44秒前
职员
加入:2018-02-08 11:03
嗨goutham,

嗨goutham,

没有任何直接将应用程序从SDK6.0.2移植到SDK6.0.10版本,因为SDK6.0.2仅适用于DA14585 AB芯片芯片,它具有来自AC硅芯片的不同ROM代码。虽然,您可以在DA14585 AC硅芯片中使用SDK6.0.10并从一开始就端口应用程序代码。

谢谢,PM_DIALOG.

Goutham.
离线
最后一次露面:1年11个月前
加入:2017-08-10 12:34
大家好,

大家好,

实际上我已经将BLE传感器代码上载到了使用6.0.2 SDK的AB硅芯片(DA14585)的电路板上。我得到了输出.Now我正在尝试使用SDK 6.0.10在AC Silicon芯片中执行相同的代码,其中我无法获得所需的输出。我从一开始就是如你所说的更改。升级到最新的SDK时有任何其他方法可以做到吗?

谢谢,
Goutham.

PM_DIALOG.
在线的
最后一次露面:4分44秒前
职员
加入:2018-02-08 11:03
嗨goutham,

嗨goutham,

没有任何其他方法将应用程序代码移植到最新的SDK。由于您将代码片段从SDK5.0.2添加到最新的SDK,因此您无法获取所需的结果,或者您的应用程序不起作用/编译?

谢谢,PM_DIALOG.

Goutham.
离线
最后一次露面:1年11个月前
加入:2017-08-10 12:34
我已添加代码

你好团队,

我们通过集成AC硅芯片和传感器开发了一个原型板。我使用6.0.10 SDK运行I2CSensor代码。当我只运行I2C传感器代码时提供传感器数据(从外围示例),但如果我在BLE堆栈内调用相同的I2C传感器代码,则编译器在I2C_Readyte内击中WAITE_UNTIL_I2CREADY(BLE不是广告)。如果我将单独的ble_app_peripherial代码上传到电路板,我们可以使用通用ble app.so读取ADC默认值,这是硬件问题还是在堆栈中进行的任何更改?

谢谢,
Goutham.n.

PM_DIALOG.
在线的
最后一次露面:4分44秒前
职员
加入:2018-02-08 11:03
嗨goutham,

嗨goutham,

强烈建议不要修改BLE堆栈,因此您应该从I2C传感器代码中删除,因为传感器延迟了BLE活动。您应该将代码添加到应用程序级别中。如果我从所提到的那么正确理解,如果您不将代码片段添加到BLE堆栈中,您的项目将正确地工作,这是预期的。它不是硬件相关问题,然后设备停止广告,因为您修改了BLE堆栈。此外,您能否澄清与BLE堆栈的意思?请注意,BLE堆栈位于ROM代码中,您无法访问它。

谢谢,PM_DIALOG.

Goutham.
离线
最后一次露面:1年11个月前
加入:2017-08-10 12:34
你好对话框,

你好对话框,
BLE堆栈意味着通过调用i2c_sensor(初始化和读取传感器芯片ID)来更改BLE_APP_PERITIELAL代码,并且我们也创建了一个新的配置文件和特性。

在BLE_APP_PERITIVELAL示例中,我们以下列方式更改了一些库
1。
在user_periph_setup.h:
//添加
#define i2c_slave_address 0x6b //设置从设备地址
#define i2c_speed_mode i2c_fast //速度模式:i2c_standard(100 kbits / s),i2c_fast(400 kbits / s)
#define i2c_address_mode i2c_7bit_addr //寻址模式:{i2c_7bit_addr,i2c_10bit_addr}
#define i2c_address_size i2c_1byte_addr //地址宽度{i2c_1byte_addr,i2c_2bytes_addr,i2c_3bytes_addr}

//选择I2C设置
#define i2c_gpio_port gpio_port_0.
#define i2c_scl_pin gpio_pin_2.
#define i2c_sda_pin gpio_pin_3.

2.在user_periph_setup.c:

//添加
setword16(clk_amba_reg,0x00);//设置时钟(HCLK和PCLK)16MHz
setword16(set_freeeze_reg,frz_wdog);//停止观看狗
SetBits16(Sys_ctrl_reg,pad_latch_en,1);//打开垫
setbits16(sys_ctrl_reg,debugger_enable,1);//打开调试器
// setbits16(pmu_ctrl_reg,periph_sleep,0);//退出外围电源
uint8_t byte_id;
i2c_eeprom_init(i2c_slave_address,i2c_speed_mode,i2c_address_mode,i2c_address_size);//启动传感器
i2c_eeprom_read_byte(0x0f,&byte_id);//读取传感器芯片ID。
setword16(reset_freeeze_reg,frz_wdog);//开始观看狗

3.
在user_custs1_def.h中:创建了自定义服务和特征

//自定义服务器1的服务4
#define def_svc4_uuid_128 {0x00,0x2a,0x93,0xa6,0xbd,0xD8,0x41,0x52,0xAC,0x0b,0x10,0x99,0x2e,0xc6,0xfe,0xed} // ACC

#define def_svc1_lsm_acc_x_uuid_128 {0x01,0x2a,0x93,0xa6,0xbd,0xd8,0x41,0x52,0xAC,0x0b,0x10,0x99,0x2e,0xc6,0xfe,0xed} //

#define def_svc1_lsm_acc_x_car_len 100 // acc

#define def_svc1_acc_x_user_desc“sensor”// acc

之后,在以下库中执行用于创建自定义服务和特性的各个步骤:
user_custs1_def.c //实现海关服务和特征数据库
user_cust1_impl.h //定义的处理程序和回调计时器
user_cust1_impl.c // handler和回调计时器描述
user_peripheral.c //为我们的自定义特征创建了对冲点写命令。

如果我评论i2c_eeprom_read_byte(0x0f,&byte_id);在User_periph_setup.c功能中,我们的原型板是广告,我们能够连接到能够查看创建的自定义服务和特性的通用BLE应用程序。我们还能够读取和写入创建的自定义特征。

但是,如果调用i2c_eeprom_read_byte(0x0f,&byte_id);在user_periph_setup.c中,原型不是广告,控制器在以下功能中被击中
i2c_error_code i2c_wait_until_eeprom_ready(void)
{
uint16_t tx_abrt_source;

//检查是否已收到ACK
for(Uint32_t i = 0; i {
send_i2c_command(0x08);//制作假人
wait_until_i2c_fifo_is_empty();//等到TX FIFO是空的
wait_until_no_master_actity();//等到没有主活动
tx_abrt_source = getword16(i2c_tx_abrt_source_reg);//读取i2c_tx_abrt_source_reg寄存器
getword16(i2c_clr_tx_abrt_reg);//清除i2c_tx_abrt_source寄存器
if((tx_abrt_source&abrt_7b_addr_noack)== 0)
{
返回i2c_no_error;
}
}
返回i2c_7b_addr_noack_error;
}

我们还尝试了一个创建传感器库(Sensor_id.c)并将功能定义为:
void i2c_test(void)
{
uint8_t byte_id;
//初始化I2C EEPROM的I2C接口
i2c_eeprom_init(0x6b,i2c_speed_mode,i2c_address_mode,i2c_address_size);
test_read_byte(0x0f,&byte_id);
}
然后我们称为i2c_test函数在user_periph_setup.c中,仍然是同样的事情。

我们在唯一的I2C示例中执行了同样的Test_Read_Byte(0x0f,&byte_id),我们能够读取传感器芯片ID。

请告诉我们我们如何解决这个问题?

我们的主要目的是通过I2C读取传感器数据并通过BLE广播相同的数据。我们在Pro-Development Board上进行了此目的,有485个女儿板(AB Silicon,使用SDDK 6.0.2)和传感器分支板它是完美的。之后只有我们将此带到原型发展。

谢谢
Goutham.n.

PM_DIALOG.
在线的
最后一次露面:4分44秒前
职员
加入:2018-02-08 11:03
嗨goutham,

嗨goutham,

强烈建议不要将传感器代码放入User_PeriPH_SETUP.c功能中,因为事务延迟系统。您能否在调试代码中运行代码,并尝试找到代码卡的位置?由于看门狗到期,该设备可能会停止广告。我强烈建议您将传感器代码片段放入user_peripherAl.c文件中。

谢谢,PM_DIALOG.

Goutham.
离线
最后一次露面:1年11个月前
加入:2017-08-10 12:34
你好pm_dialog,

你好pm_dialog,
我们在调试模式下运行代码,代码在下面的函数中被卡住
i2c_error_code i2c_wait_until_eeprom_ready(void)
{
uint16_t tx_abrt_source;

//检查是否已收到ACK
for(Uint32_t i = 0; i {
send_i2c_command(0x08);//制作假人
wait_until_i2c_fifo_is_empty();//等到TX FIFO是空的*******这里的控制器陷入困境
wait_until_no_master_actity();//等到没有主活动
tx_abrt_source = getword16(i2c_tx_abrt_source_reg);//读取i2c_tx_abrt_source_reg寄存器
getword16(i2c_clr_tx_abrt_reg);//清除i2c_tx_abrt_source寄存器
if((tx_abrt_source&abrt_7b_addr_noack)== 0)
{
返回i2c_no_error;
}
}
返回i2c_7b_addr_noack_error;
}
我们还通过调用user_peripheral.c中的传感器代码码来运行代码仍然没有改进。同样的问题重复代码在wait_until_i2c_fifo_is_empty()处于上面的函数中被困在上面的函数中。

但是,如果我们运行唯一的I2C_SENSOR代码,我们已经执行了上面的功能,我们在调试模式下运行i2c_sensor代码,每次调用该代码码时,控制器正在执行上述功能。
请告诉我们任何其他方法,可以执行。

谢谢
Goutham.

PM_DIALOG.
在线的
最后一次露面:4分44秒前
职员
加入:2018-02-08 11:03
嗨goutham,

嗨goutham,

I2C驱动程序和您使用的功能用于接口EEPROM存储器,实现在通过发送0x08并等待来自另一侧的ACK的存储器来接通存储器(如果存储器准备好运行)。所以调用wait_until_i2c_fifo_is_empty()以检查Tx FIFO是否为空,因为之前已将字节放置到缓冲区以便传输数据。我认为它不是wait_until_i2c_fifo_is_empty()该设备仍然存在困扰,但没有从另一侧的响应的事实,因此驱动程序在发送0x08字节上,直到它从另一侧从设备获得ACK。除非某些东西保持线路忙碌,否则HW模块不会发送任何数据,因此它的FIFO它至少留在至少一个字节中。您能否在没有BLE活动的情况下测试传感器代码?您是否尝试探测I2C线路以检查您正在发送或接收的内容?

谢谢,PM_DIALOG.