![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
SYD8811/SYD8810
本栏介绍了SYD8811/SYD8810的相关技术文章
城东
本人从事电子行业 热烈欢迎同行交流!!
有问题请email:3107408564@qq.com
展开
-
SYD881X读取GATT VALUE的长度
SYD881X读取GATT VALUE的长度原创 2024-06-20 12:01:16 · 234 阅读 · 0 评论 -
SYD88xx使代码在RAM内存中执行/运行
SYD88xx使代码在RAM内存中执行/运行原创 2024-06-19 13:04:03 · 361 阅读 · 0 评论 -
SYD881X HID工程重连后连接参数没有更新功耗下不来
SYD881X HID工程重连后连接参数没有更新功耗下不来原创 2024-05-28 18:23:34 · 320 阅读 · 0 评论 -
SYD881X软件定时器softtimer跑一段时间后突然不跑了的解决办法
SYD881X软件定时器跑一段时间后突然不跑了的解决办法原创 2024-05-14 23:50:25 · 393 阅读 · 0 评论 -
SYD881X使用代码修改32.768khz tolerance PPM
SYD881X使用代码修改32.768khz tolerance PPM原创 2024-01-19 16:55:55 · 470 阅读 · 0 评论 -
SYD881X使用代码修改32.768Khz时钟源
客户遇到一个问题:出货的时候4K配置的时钟源为内部32.768ROSC时钟源,但是代码却使用了外部32.768Khz的晶振作为时钟源,这时候可以升级4K,但是升级4K比较麻烦,所以这里做了一个可以在代码钟修改4K里面的时钟源配置的功能.请从如下地址下载代码:https://download.csdn.net/download/chengdong1314/87788776。代码第一次运行的时候输出如下打印,注意:过一会后设备将会复位,RTT会断开。SYD881X使用代码修改32.768Khz时钟源。原创 2023-05-16 11:17:42 · 174 阅读 · 0 评论 -
SYD8811在进行channel_map或者connection_update时出现长时间高电流问题极其解法
SYD8811在进行channel_map或者connection_update时出现长时间高电流问题极其解法原创 2023-01-29 18:13:04 · 228 阅读 · 0 评论 -
SYD8811串口全双工自动回传测试问题和解决办法[卡死在发送函数的while中]
SYD8811串口全双工自动回传测试问题和解决办法原创 2022-11-21 11:42:31 · 463 阅读 · 0 评论 -
SYDTEK动态配置GPIO的POL寄存器实现双边沿中断
SYDTEK动态配置GPIO的POL寄存器实现双边沿中断原创 2022-11-02 12:09:33 · 419 阅读 · 0 评论 -
SYD8811 SystemTick中断[MCU时钟源配置为外部晶振]
SYD8811 SystemTick中断[MCU时钟源配置为外部晶振]原创 2022-11-02 11:13:30 · 744 阅读 · 0 评论 -
SYD8811/8810频繁写flashdata然后立即读会造成数据错误的解决办法
综上述所这个问题应该是cache没有来得及刷新造成的,写完立即读这时候读到的是之前缓存在cache的数据,所以这里在读取之前加上RefreshCache();本文使用源码请从如下地址下载:https://download.csdn.net/download/chengdong1314/86790799。可以看到在写完数据后立即去读返回的数据是错误,但是写完成后按下按键2去读,缺可以读到正确的内容!原创 2022-10-20 13:40:28 · 776 阅读 · 0 评论 -
SYD8811 8810获取芯片唯一码unique_id的说明
打开SDK的Source Code\SYD8811_peripheral_misc\unique_id\Keil工程可以看到如下代码:这里通过接口syd_read_unique_id获取芯片唯一码:extern void syd_read_unique_id(uint8_t* id, uint8_t sz);该唯一码由16个Byte组成,每颗芯片都不一样,unique_id有着丰富的应用,比如用于加密,身份识别等!上图为两个不同设备的unique_id注意:syd_read_unique_i原创 2022-03-04 13:15:49 · 678 阅读 · 0 评论 -
白名单的使用
白名单的使用客户提出这样的一个需求:SYD8811作为从机,只能够给指定的主机连接(只能够给制定mac地址设备连接)但是扫描功能不受限制,并且改功能还可以开关。这个需求使用到了白名单的概念,经过研究之后发现SYD8811只有一个白名单,不能够做白名单列表,并且白名单还不能够单独对扫描请求和连接请求。经过沟通,这里决定使用白名单,但是需要切换普通模式和白名单模式!代码上使用到了KEY1和KEY2两个按键的中断:因为White_List_Enable默认为0,所以上电后白名单是被关闭的,任何设备都能原创 2021-10-20 15:13:05 · 1251 阅读 · 0 评论 -
SYD8811 广播名称为19个字节下IOS手机会错乱的BUG解决办法
使用透传修改了一个广播数据中名称长度为19个字节(SYD8811BLE123456789)的设备,下载代码后从手机看到如下广播:连接上后看到设备名称如下,确实是正确的:但是退出连接后再次搜索广播就出现了问题,在手机上看到的界面如下:对比之前的广播截图发现设备名称变长了,连接过程中也看到了广播名不对了,界面如下:连接上后读的设备名称又是一样的:经过分析发现,这个现象是因为协议栈的处理不当造成的,目前在不修改LIB的情况下解决这个问题的方法如下:在profile中把名称修改成自己想要的原创 2021-09-02 10:53:59 · 350 阅读 · 0 评论 -
SYD881X使用代码修改晶振参数Xtal trim
在SYDTEK系列芯片中晶振的trim参数决定了蓝牙载波信号的频偏,因为该参数如此重要所以这里就在LIB中增加修改4K中的该参数。 这里对外提供两个接口:extern uint8_t Xtal_trim_get(); //获取目前的晶振参数extern uint8_t Xtal_trim_set(uint8_t trim); //设置自己从频谱仪上调好的参数 打开工程Source Code\SYD8811_peripheral_misc\Xtal_tri...原创 2021-08-23 21:52:32 · 645 阅读 · 0 评论 -
SYD8811/8810上报主机扫描请求事件
我们知道当BLE主机扫描从机的时候会发出自己的地址和被扫描设备的地址:有些时候可能需要协议栈上报这个事件以告知应用层本蓝牙设备被其他主机扫描了,这里按照如下方法修改代码:1.在上报事件中增加主机扫描事件:2.在蓝牙回调函数中把主机的地址打印出来:编译下载代码后可看到SYD8811有打印出主机的地址(如下图红框),用手机连接上蓝牙后可看到确实是手机的MAC地址(如下图篮框):注意:使用特定的Lib才有这个功能,该功能不会放到公版的SDK中!本文源码如下:请从如下地址原创 2021-08-17 13:04:17 · 444 阅读 · 0 评论 -
SYD 8811 MTU使用步骤
注意:目前MTU最大只能够是188,用户可用185,目前还不支持更大的MTU!一、烧录程序1、烧录4K和服务,之后在烧录程序2、MTU测试工程路径(MTU在git仓库上属于独立的分支,并不存在Master分支中):SYD8811 SDK\Source Code\SYD8811_ble_mtu_peripheral\1.SYD8811_MTU二、使用nrf connect连接设备 互相请求扩大接收MTU SIZE1、APP请求扩大8811的接收Size为1282、使能服务0001下的0003特性原创 2021-07-12 11:07:37 · 925 阅读 · 1 评论 -
SYD8811和SYD8810用户内存空间极限设置
当内存达到上限的时候,在代码实在优化不下去的时候,能否让蓝牙协议栈再挤压一下代码空间来解决燃眉之急?这里的答案是:有的.有办法扩大内存空间,或者说有可能你手头上的代码设置不是最大的!对于一些无特殊要求的工程,KEIL中原来的设置如下:这里给用户的内存大小只有20KB,关于SYD8811内存的分配请看文章:http://mp.weixin.qq.com/s?__biz=Mzg2OTIyNjUyOQ==&mid=2247483893&idx=1&sn=ee0ecb39ed4fd原创 2021-07-12 11:02:45 · 625 阅读 · 0 评论 -
SYD811/SYD8821如何适配JLinkRTTViewer使用地址自动检测(Auto Detection)的功能
目前SYDTEK Studio在进行RTT展示的时候如果KEIL也进行了代码的下载和仿真就会卡死.为了解决这个位置,这里打算适配JLinkRTTViewer. 这里存在一个问题就是JLinkRTTViewer原生没有SYD8811等芯片.JLinkRTTViewer对于地址有两种输入方式:1.固定地址2.自动检测地址 SYD8811等芯片的SDK中对于RTT结构体的地址在之前都改到随工程分配的地址,也就不是固定地址了!有可能每次编译RTT结构体的地址都会改变,所以这里为了更好的使用J原创 2021-07-12 10:53:39 · 784 阅读 · 0 评论 -
SYD8811 AES硬件加密
在硬件加密这块SYD8811完全遵循SYD8801的操作方式和流程,这里请参考SYD8801的AES硬件加密文章:https://blog.csdn.net/chengdong1314/article/details/77692902该文章摘录如下:SYD8801 硬件AES加密aes函数表示如下:encryptedData=e(key,plaintextData)SYD8801对应的API:void smp_aes_encrypt(uint8_t k, uint8_t p, uint8_t* c原创 2021-07-12 10:03:36 · 752 阅读 · 0 评论 -
SYD8811 用Studio下载代码FW Size Over 错误
在用Studio来烧录代码的时候如果配置错误有可能报FW Size Over 错误,如下:这个错误有下面几个原因造成:1.SYD8810没有激活所以造成4k_Setting烧录不成功2.烧录4k_Setting文件后没有重新复位,这时候4k_Setting有可能没有正确起作用,复位一次就能够起作用3.FLASH供电管脚焊接不良(8811是13号管脚,8810是第9个管脚)造成烧录4k_Setting不成功 4.没有烧录4k_Setting文件...原创 2021-07-09 12:13:48 · 345 阅读 · 0 评论 -
SYD8811扫描例程使用说明
SYD8811支持扫描不支持连接,打开下面得工程可以看到我们扫描的程序“SYD8811_SDK\Source Code\SYD8811_ble_peripheral\5.SYD8811_BLE_UART_EVBOLED_Scan\Keil”:这里在ble_init中初始化了扫描参数:这里把扫描窗口和扫描间隔设置为一样长,也就是说SYD8811将会持续不断的扫面。在进入while1之前开启了扫描:当协议栈扫描到设备的时候会上报给应用层进入“else if(p_evt->evt_code ==原创 2021-07-09 12:09:07 · 678 阅读 · 2 评论 -
SYD8811芯片透传的进阶之回环发送
为了更好的模拟现实的透传,这里做了如下测试环境:首先是SYD8811开发板往SYD8810模组通过串口发送数据,然后SYD8810模组通过BLE往手机发送,手机收到数据后原路返回一样的数据到SYD8811开发板!SYD8811开发板这边的代码不单单是发送串口数据,还要进行数据的接收和对比,发送完数据后如果收到了APP发送过来的数据就会继续发送,如果10s都没有收到APP的数据,这里也会继续发送(因为SYD8810模组和手机APP都可能有延迟,所以这里设置了一个10s的超时时间),发送数据的处理如下原创 2021-07-09 12:07:15 · 561 阅读 · 2 评论 -
SYD8811 串口透传TX和RX管脚在各电平的漏电情况以及配置低功耗的方法
对于SYD8810串口透传例程,串口初始化的时候把GPIO12和GPIO14分别配置为RX和TX功能并且去掉上拉:这时候如果在TX和RX悬空的情况下测试功耗,得到的结果如下:RX悬空,TX接地和接电源分别如下左图和右图:可以看到TX接地的时候比接电源的时候低2UA,也就是说TX不管是接地还是接电源对漏电都没有多大的影响!TX悬空,RX接地和接电源分别如下左图和右图:可以看到RX悬空的时候漏电非常大,同时:这也是芯片GPIO的特性,当管脚配置为输入状态的时候接高电平和低电平都不会有漏原创 2021-07-09 11:58:48 · 2787 阅读 · 1 评论 -
SYD8811 LPO Calibration 校准功耗优化
我们知道8811在使用内部晶振的时候每3分钟需要调用一次LPOCalibration()对LPO进行校准,在实验中我们发现当调用该函数的时候,芯片的电流会出现以下波形。通过对波形的测量我们可以看到当LPOCalibration()进行的时候会持续一段时间电流达到2.18mA,而且会持续到下一次的广播到来,电流才会下降。造成这个现象的原因是LPOCalibration()函数需要外部32M时钟源存在,而在SystemSleep()下外部的32M时钟源是会关闭的,所以LPOCalibration()函数会一原创 2021-07-07 10:20:47 · 484 阅读 · 0 评论 -
SYD8811 GPIO21管脚用作RESET复位功能
从SYD8811的“SYD8811_pinmux_table”文档(“比如SDK下面的这个文档Documentation\SYD8811_pinmux_table_20200114 155924.xlsx”)中我们可以看到SYD8811的GPIO21是有复位功能的。只不过芯片在上电的时候默认设置为GPIO功能,所以一般情况下GPIO21拉低是不会复位的。想要打开GPIO21的复位功能要做两个事情:关闭GPIO21的上拉功能,在上图中我们可以看到GPIO21对应PAD27,所以gpio_init函数原创 2021-07-07 10:18:07 · 1147 阅读 · 0 评论 -
SYD8811 boot_flashdata 使用说明
boot_flashdata这是一个比较特殊的应用,他在OTA的时候先把数据拷贝到FLASH DATA区,然后由在A区的用户代码决定是否把FLASH DATA区域的数据拷贝到CODEB区来运行,至于内存和代码的分配请看文章:《SYD8811内存和代码的分布》这里先做一种直接跑到codeB区域运行然后codeA区域失效的方式:OTA完成后把checksum和sz写入数据区:在需要的时候(这里是按下GPIO21)把FLASHDATA的数据调入CODEB,然后运行:这里测试先通过OTA24原创 2021-07-07 10:09:14 · 518 阅读 · 6 评论 -
SYD8811rtc系统库可能会造成卡死在rtc初始化中
在有些工程中会使用到SYDTEK的rtc系统库,在上电的时候调用这样的初始化:最近客户反馈有卡死在这个函数中的可能,经过查找是因为代码和4K里面的关于时钟源的配置不一致,经过修改后确实能够解决问题!我们这边同步查找问题的时候发现我们的RTC初始化函数中还是有很多while循环的,为了保证rtc初始化函数不会卡死,这里我们同步修改rtclib库!增加超时退出机制!这些修改都在最新的SDK中生成!...原创 2021-07-07 09:45:28 · 591 阅读 · 0 评论 -
ADC校准的说明
SYDTEK芯片在FT(封装测试)的时候会进行ADC的校准,校准值写入芯片中,在一些对ADC的精度十分高的场合就需要在ADC初始化中对ADC进行校准,但是对于一般对ADC要求不高的场合可以固定写入一个校准值,而不需要调入芯片内部的校准。这里打开工程“SYD8811_SDK\Source Code\SYD8811_peripheral\adc”可以看到如下的代码:如果不是很追求ADC的精度可以不用括号内部的校准操作,直接使用括号前面被注释的内容把0x12固定写入ADC中,这样的一个校准方式对于如果芯片内原创 2021-07-07 09:39:38 · 4378 阅读 · 0 评论 -
修改SYD8811通过API修改FLASH DATA大小
这里提供flash_data_size_set接口来修改flash_data,关于这些说明请看例程:“SYD8811_SDK\Source Code\SYD8811_peripheral_miscSYD8811_BLE_UART_OTA_FLASHDATA_size”打开例程后在main函数中可看到:这里通过按下按键1来多分配8K的空间,这里测试按下按键1后结果如下:可以看到复位后的空间大小确实改变了!这里再配置前通过工具读回的大小如下:配置后通过工具读回的大小如下:本例程用到的4k如原创 2021-07-06 10:31:57 · 245 阅读 · 0 评论 -
SYD8811 ADC注意点[中断方式在ADC采集的时候要关闭睡眠][SYD8810 ADC漏电大解决办法]
在SDY8811中,ADC采样可以轮询也可以用中断,轮询是不会有问题的,但是到中断这里就有可能有问题了,因为SYD8811是1MHZ采样的,MCU是64MHZ,所以ADC模块的时钟由MCU的时钟64M分频得到的,所以在ADC采集的时候要保证MCU的时钟一直存在,也就是说不能够进入睡眠!在SYD8811的手环的工程中,有如下的设置:在开始ADC采集的时候调用syd_nosleep传入SYD_NOSLEEP_ADC变量并且第一个参数传入true:syd_nosleep函数如下:在ADC中断到来读取完原创 2021-07-06 10:22:40 · 800 阅读 · 0 评论 -
SYD8811选在外部32k晶振作为时钟源在断线后不广播的解决办法
这是因为4k_setting中默认选择的是内部晶振,在代码开始的时候选择了外部晶振,但是在断线的时候协议栈会自动装载4k_setting的相关设置,也就是断线后始终源又被切换到内部晶振了,而不经过校准相关的操作时钟是不准的,也就有可能造成再也看不到广播了! 这里在《SYDTEK_Studio.exe》中增加配置时钟源的功能,按照下图根据自己的需要正确配置时钟源即可:...原创 2021-07-06 09:52:13 · 279 阅读 · 0 评论 -
SYD88811新DTM测试
DTM TX测试解压《SYDTEK Studio release》得到如下目录:其中的《syd8811_dtm_code.bin》就是dtm测试或者HCI测试的时候要下载到芯片中的程序,也就是DTM测试之后芯片里面的程序就变了,想要恢复旧的程序要重新下载才行!这里打开“SYDTEK_Studio.exe”界面如下:因为DTM只能够用串口来测试,所以这里打开串口(注意:硬件上必须使用USB装ttl的串口板子连接到SYD8811芯片,QFN48管脚的芯片连接到GPIO15 16管脚,QFN32芯片原创 2021-07-05 11:11:52 · 994 阅读 · 0 评论 -
SYD8810的烧录串口为GPIO12 GPIO14
SYD8810的烧录串口为GPIO12 GPIO14,这里和SYD8811是不一样的,SYD8811为GPIO15 GPIO16!原创 2021-07-05 11:07:45 · 411 阅读 · 0 评论 -
SYD8811 SDK在使用了RTT的工程中内存过多占用的问题
有客户反馈在有RTT的工程中SYD8811的内存基本被占用完了,经过寻找后发现是因为RTT设置的原因,在原来的SDK中RTT结构体的地址被设置为了内存的最后面,这时候KEIL就认为所有内存区域都被占用了,其实中间很多内存都没有被占用!原来的RTT结构体设置如下;这时候编译出来内存基本被全部占用:Program Size: Code=16922 RO-data=242 RW-data=292 ZI-data=20004这时候KEIL已经被骗了,这时候可以这样修改设置:这时候编译出来的内存占用大小原创 2021-07-05 11:02:47 · 396 阅读 · 0 评论 -
SYD8811和SYD88221的IO口驱动能力的说明
SYD8811和SYD88221的IO在输出高电平的时候默认最大电流为2MA,但是在PAD模块是有寄存器设置IO口驱动能力为4MA,在SYD8811寄存器是在PIN_CONFIG_TYPE的PAD_OUTPUT_DRV数组,设置为1就打开强输出功能,他和GPIO口的关系并不是一一对应的,这里请看GPIO和PAD的相关文章!SYD8821的寄存器是PAD_CTRL_TYPE里面的PAD_DS寄存器!...原创 2021-07-05 10:58:57 · 564 阅读 · 0 评论 -
SYD8821或SYD8811连接《SYDTEK Studio》异常状况说明
不管是SYD8811还是SYD8821在焊接完成后都可以先用《J-Link Commander》进行一次连接,如果没能够出现这样的界面那么硬件焊接不正常,先要检查硬件:出现这样的界面后可以使用《SYDTEK Studio》进行连接,如果还有问题可能会出现这样的界面:这时候可以先尝试降低SWD的速度,因为有些仿真器不支持比较高的速度,这里尝试降低为1M,如果还是不行就要从硬件上检查问题,硬件上主要注意如下几点:32MHz晶振以及和32MHz晶振连接的MCU芯片管脚是否焊接OK!注意不管是SYD88原创 2021-06-28 10:18:07 · 698 阅读 · 0 评论 -
SYD8811 GPIO模块中PAD和GPIO的关系
这里看PIN_Pullup_Enable函数,我们发现我们看到这里是设置了PAD_PULLU的相关寄存器,这里所谓的PAD就是指芯片内部晶圆的标号,而GPIO只是某些PAD拥有的功能,但是PAD和GPIO的序号却不是一一对应的,比如PAD1对应着GPIO1,PAD17对应GPPIO11,PAD和GPIO的关系以及GPIO的功能列表请看SDK的文档:“SYD8811_SDK\Documentation\SYD8811_pinmux_table_20190527.xlsx”...原创 2021-06-28 10:16:25 · 2876 阅读 · 0 评论 -
SYD8811 使用外部32.768Khz晶振作为时钟源
要使用外部32.768KHZ晶振作为时钟源,要保证外部32.768KHZ晶振的电路是正确的,对于开发板而言,有个地方需要注意,因为LED1,LED2占用了晶振的关键,所以这里首先要把SB5和SB6断开:软件上首先在ble_init协议栈初始化完成后这样调用接口:ClockSwitch(SYSTEM_32K_CLOCK_XOSC);在我们的工程中是打开宏:USER_32K_CLOCK_RCOSC:因为晶振和GPIO0 GPIO1复用,所以这里要把这两个管脚的初始化和上拉去掉:同时查看一下代码看看还原创 2021-06-28 10:12:30 · 1054 阅读 · 0 评论 -
SYD8811选在外部32k晶振作为时钟源在断线后不广播的解决办法
这是因为4k_setting中默认选择的是内部晶振,在代码开始的时候选择了外部晶振,但是在断线的时候协议栈会自动装载4k_setting的相关设置,也就是断线后始终源又被切换到内部晶振了,而不经过校准相关的操作时钟是不准的,也就有可能造成再也看不到广播了!这里在《SYDTEK_Studio.exe》中增加配置时钟源的功能,按照下图根据自己的需要正确配置时钟源即可:本文的工具如下:https://download.csdn.net/download/chengdong1314/19867291...原创 2021-06-28 10:08:17 · 216 阅读 · 0 评论