从6.0.2升级到6.0.10

⚠️
嗨,那里..感谢您参加论坛。激动人心的消息!现在,我们正在转到我们的新论坛平台,该平台将提供更好的功能,并包含在主话网站中。所有帖子和帐户都已迁移。我们现在仅在新论坛上接受流量 - 请在https://www.dialog-spoomendonductor.com/support。我们将在未来几天修复错误 /优化搜索和标记。
10帖子 / 0新
最后一篇文章
古茅姆
离线
最后一次露面:1年11个月前
加入:2017-08-10 12:34
从6.0.2升级到6.0.10

你好团队,
我现在使用AC Silicon芯片时,我需要将代码从6.0.2到6.0.10版本。我已经上传并使用SDK 6.0.2上传并成功地在AB硅中执行了代码。现在我需要将其上传到AC Silicon芯片。我可以得到任何直接升级的支持吗?

谢谢,
古茅姆

设备:
pm_dialog
离线
最后一次露面:1小时27分钟前
职员
加入:2018-02-08 11:03
嗨,古茅姆,

嗨,古茅姆,

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

谢谢,pm_dialog

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

大家好,

实际上,我已经将BLE传感器代码上传到了使用6.0.2 SDK的AB硅芯片(DA14585)的板上。我得到了输出。现在我尝试使用SDK 6.0.10在AC硅芯片中执行相同的代码,在此我无法获得所需的输出。正如您所说,我从一开始就进行了更改。在升级到最新SDK时还有其他方法要做吗?

谢谢,
古茅姆

pm_dialog
离线
最后一次露面:1小时27分钟前
职员
加入:2018-02-08 11:03
嗨,古茅姆,

嗨,古茅姆,

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

谢谢,pm_dialog

古茅姆
离线
最后一次露面:1年11个月前
加入:2017-08-10 12:34
我添加了代码

你好团队,

我们已经通过集成AC硅芯片和一个传感器来开发原型板。我已经使用6.0.10 SDK运行了I2CSENSOR代码。当我仅运行I2C传感器代码(来自外围示例)时,它会提供传感器数据,但是如果我在BLE堆栈中调用相同的I2C传感器代码,则编译器将在Wait_until_i2cready内部击中编译器(BLE不是广告)。而且,如果我将单独的ble_app_peripherial代码上传到板上,我们可以使用通用BLE应用程序读取ADC默认值。因此,这是硬件问题还是在堆栈中进行任何更改?

谢谢,
古茅姆

pm_dialog
离线
最后一次露面:1小时27分钟前
职员
加入:2018-02-08 11:03
嗨,古茅姆,

嗨,古茅姆,

强烈建议不要修改BLE堆栈,因此您应该从i2C传感器代码中删除I2C传感器代码,因为传感器会延迟BLE活动。您应该将代码添加到应用程序级别中。如果我从您提到的内容中正确理解,那么如果您不将代码段添加到BLE堆栈中,则您的项目正常工作,这是可以期待的。这不是与硬件有关的问题,然后设备停止广告,因为您修改了BLE堆栈。另外,您能澄清一下BLE堆栈的意思吗?请注意,BLE堆栈在ROM代码中,您无法访问它。

谢谢,pm_dialog

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

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

在ble_app_peripheral示例中,我们以以下方式更改了一些库
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 //地址width {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_freeze_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_freeze_reg,frz_wdog);//开始观看狗

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

//自定义服务器1的服务4
#define def_svc4_uuid_128 {0x00,0x2a,0x93,0x93,0xa6,0xbd,0xd8,0x41,0x41,0x52,0xAc,0x0b,0x0b,0x10,0x99,0x99,0x99,0x2e,0x2e,0xc6,0xc6,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xec,0x}

#define def_svc1_lsm_acc_x_uuid_128 {0x01,0x2a,0x2a,0x93,0xa6,0xbd,0xbd,0xd8,0x41,0x52,0x52,0xac,0xAc,0x0b,0x0b,0x10,0x99,0x99,0x99,0x2e,0x2e,0xc6,0xcc6,0xfe,0 xfe,0 xfe,/xfe,0 xfe,0 xfe,/xfe,0 xfe,0xfe,0xfe,/xfe,0xfe,0xfe,/xfe,0 xfe,0 xfe,0 xfe,0xfe,/xfe,/x。

#define def_svc1_lsm_acc_x_ch_char_len 100 // acc

#define def_svc1_acc_x_user_desc“传感器” // ACC

之后,在以下库中执行了各自的创建海关服务和特征的步骤:
USER_CUSTS1_DEF.C //实施海关服务和特征数据库
user_cust1_impl.h //定义的处理程序和回调计时器
user_cust1_impl.c //处理程序和回调计时器说明
user_peripheral.c //为我们的自定义特征创建了contro点写命令。

如果我评论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_activity();//等到无主活动直到
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);
}
然后,我们在user_periph_setup.c中调用了i2c_test函数,但仍然遇到了同样的事情。

我们在唯一的i2c示例中执行了相同的test_read_byte(0x0f和byte_id),我们能够读取传感器芯片ID。

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

我们的主要目的是通过I2C读取传感器数据,并通过BLE广播相同的数据。我们在Pro开发委员会上使用了485个女儿板(AB硅和使用SDDK 6.0.2)和传感器突破板进行了此操作。在那之后,只有我们将其带入了原型开发。

谢谢
古茅姆

pm_dialog
离线
最后一次露面:1小时27分钟前
职员
加入:2018-02-08 11:03
嗨,古茅姆,

嗨,古茅姆,

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

谢谢,pm_dialog

古茅姆
离线
最后一次露面: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_activity();//等到无主活动直到
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代码,每次我们调用该摘要代码时,控制器都会执行上述函数。
请告诉我们其他可以执行的方法。

谢谢
古茅姆

pm_dialog
离线
最后一次露面:1小时27分钟前
职员
加入:2018-02-08 11:03
嗨,古茅姆,

嗨,古茅姆,

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