从6.0.2升级到6.0.10

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
10个帖子/ 0个新
最后发表
离线
最后看到:1年11个月前
加入:2017-08-10说
从6.0.2升级到6.0.10

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

谢谢,

设备:
PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
你好高,

你好高,

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

谢谢,PM_Dialog

离线
最后看到:1年11个月前
加入:2017-08-10说
嗨,团队,

嗨,团队,

实际上我已经使用6.0.2 SDK上传了一个BLE sensor code到有AB硅芯片DA14585的板上。我得到了输出。Now I am trying to execute the same code in AC silicon chip using SDK 6.0.10 where I am not able to get the desired output. I have made changes from the beginning as you said.Is there any additional method to do while upgrading to latest SDK?

谢谢,

PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
你好高,

你好高,

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

谢谢,PM_Dialog

离线
最后看到:1年11个月前
加入:2017-08-10说
我已经从添加的代码

你好,

我们将交流硅芯片和传感器集成在一起,研制出了一种原型板。我已经运行了一个i2csensor代码使用6.0.10 SDK到这个板。当我只运行i2c传感器代码时,它给出了传感器数据(来自外围示例),但如果我在ble堆栈中调用相同的i2c传感器代码,编译器将在wait_until_i2cready (ble不是广告)中遇到i2c_readbyte。如果我上载单独的ble_app_peripherial代码到板上,我们就可以使用通用BLE app读取ADC的默认值。所以,这是硬件问题还是在堆栈中做的任何更改?

谢谢,
高。N

PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
你好高,

你好高,

强烈建议不要修改BLE Stack,因此应该删除i2c传感器代码,因为传感器延迟了BLE活动。您应该将代码添加到应用程序级别。如果我从你提到的正确理解,你的项目工作正确,如果你不添加你的代码片段到ble堆栈,这是可预期的。这不是一个硬件相关的问题,然后设备停止发布,因为您修改了BLE堆栈。另外,你能解释一下BLE堆栈是什么意思吗?注意,BLE堆栈是在ROM代码中,你不能访问它。

谢谢,PM_Dialog

离线
最后看到:1年11个月前
加入:2017-08-10说
你好,对话框,

你好,对话框,
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 (100kbits /s), I2C_FAST (400kbits /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设置
#定义I2C_GPIO_PORT GPIO_PORT_0
#定义I2C_SCL_PIN GPIO_PIN_2
#定义I2C_SDA_PIN GPIO_PIN_3

2.在user_periph_setup.C:

/ /添加
SetWord16 (CLK_AMBA_REG 0 x00);//设置时钟(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);/ / initilizing传感器
i2c_eeprom_read_byte (0 x0f &byte_ID);//读取传感器芯片ID。
SetWord16 (RESET_FREEZE_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}//默认

#define def_svc1_lsm_acc_uuid_128 {0x01、0x2A、0x93、0xA6、0xBD、0xD8、0x41、0x52、0xAC、0x0B、0x10、0x99、0x2E、0xC6、0xFE、0xED}//Acc . txt

#define DEF_SVC1_LSM_ACC_X_CHAR_LEN 100 //默认值

#define DEF_SVC1_ACC_X_USER_DESC "Sensor" //ACC

在此之后,在以下图书馆分别进行海关服务和特色的创建步骤:
user_custs1_def.c //实现海关服务和特色数据库
User_cust1_impl.h //定义的处理程序和回调计时器
User_cust1_impl.c //处理程序和回调计时器描述
User_peripheral.c //为我们的自定义特性创建的控制点写入命令。

如果我评论i2c_eeprom_read_byte(0x0F,&byte_ID);在user_外围_setup. c函数中,我们的原型板是advertising,我们能够连接到一个通用BLE应用程序,能够看到创建的自定义服务和特征。我们也能够读取和写入创建的自定义特征。

但是如果调用i2c_eeprom_read_byte(0x0F,&byte_ID);在user_peri_setup . c中,prototype不是广告,下面的函数中是控制器
i2c_error_code i2c_wait_until_eeprom_ready(空白)

uint16_t tx_abrt_source;

//检查是否收到ACK
For (uint32_t I = 0;我< I2C_MAX_RETRIES;我+ +)

SEND_I2C_COMMAND (();//创建虚拟访问
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),并将函数定义为:
空白i2c_test(空白)

uint8_t byte_ID;
//初始化I2C EEPROM I2C接口
i2c_eeprom_init(0x6B, I2C_SPEED_MODE, I2C_ADDRESS_MODE, I2C_ADDRESS_SIZE);
test_read_byte (0 x0f &byte_ID);
}
然后我们在user_外围_setup. c内部调用i2c_test函数,仍然发生了同样的事情。

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

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

我们的主要目的是通过I2C读取传感器数据,通过BLE广播相同的数据。我们在485子板(AB硅和使用SDDK 6.0.2)和传感器接线板上执行这是完美的。在此之后,我们将其用于原型开发。

谢谢
高。N

PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
你好高,

你好高,

强烈建议不要将传感器代码放入user_peri_setup .c函数中,因为事务延迟系统。您能不能在调试代码中运行您的代码,并尝试找到代码卡住的地方?可能是由于看门狗过期,设备停止了广告。我强烈建议您将传感器代码片段放置到user_peripheral.c文件中。

谢谢,PM_DIalog

离线
最后看到:1年11个月前
加入:2017-08-10说
你好PM_Dialog,

你好PM_Dialog,
我们在调试模式下运行代码,代码被卡在下面的函数中
i2c_error_code i2c_wait_until_eeprom_ready(空白)

uint16_t tx_abrt_source;

//检查是否收到ACK
For (uint32_t I = 0;我< I2C_MAX_RETRIES;我+ +)

SEND_I2C_COMMAND (();//创建虚拟访问
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
离线
最后看到:2天3小时前
工作人员
加入: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