蓝牙协议栈(六、芯片组)

2023-05-16

在本章中,我们首先解释蓝牙芯片组如何物理连接,然后提供有关流行的蓝牙芯片组及其与BTstack一起使用的信息。

HCI接口

主机(计算机或MCU)与主机控制器(实际蓝牙芯片组)之间的通信遵循主机控制器接口(HCI),如下所示。HCI定义了如何交换命令,事件,异步和同步数据包。异步数据包(ACL)用于数据传输,而同步数据包(SCO)用于带有耳机和免提配置文件的语音。

HCI H2

在桌面级计算机上 笔记本电脑,USB主要用作HCI传输层。对于USB蓝牙芯片组,几乎没有变化:市场上的大多数USB硬件锁目前包含Broadcom BCM20702或CSR 851x芯片组。它也被称为H2。

在嵌入式系统中,使用UART连接,尽管也可以使用USB。

对于UART连接,存在不同的传输层变体。

HCI H4

最常见的是官方的“UART Transport”,也称为H4。它需要通过CTS / RTS线路进行硬件流量控制,并假设UART线路没有错误。

HCI H5

“三线UART传输”,也称为H5,利用SLIP协议传输数据包,并通过重传处理数据包丢失和比特错误。虽然可以在没有硬件握手的情况下将H5真正用于“三线”,但我们建议使用带有硬件握手的完整UART。如果您的设计缺乏硬件握手,H5是您唯一的选择。

BCSP

H5的前身。与H5的主要区别在于,偶数奇偶校验用于BCSP。要将BCSP与BTstack一起使用,可以使用H5传输并调用hci_transport_h5_enable_bcsp_mode

eHCILL

最后,德州仪器(TI)扩展了H4以创建“eHCILL传输”层,允许双方进入睡眠模式而不会失去同步。虽然它比H5更容易实现,但它仅受TI芯片组支持,无法处理数据包丢失或误码。

H4通过SPI

来自Dialog Semiconductor和EM Marin的芯片组允许通过SPI发送H4格式的HCI数据包。SPI具有主机控制器和主机更简单实现的优点,因为它不需要精确的时钟。SPI主设备(这里是主机)提供SPI时钟,SPI从设备(主机控制器)只需在时钟线改变时读取和更新数据线。EM9304支持高达8 Mhz的SPI时钟。但是,需要一个附加协议让主机知道主机控制器何时有HCI数据包。通常,使用额外的GPIO来发出信号。

HCI的缺点

不幸的是,人机交互标准错过了一些相关的细节:

  • 对于基于UART的连接,未定义初始波特率,但大多数蓝牙芯片组使用115200波特。为了获得更好的吞吐量,需要更高的波特率,但是没有标准的HCI命令来更改它。相反,每个供应商都必须提出他们自己的一组特定于供应商的命令。有时,还需要额外的步骤,例如进行热复位,以激活波特率变化。

  • 某些蓝牙芯片组没有唯一的MAC地址。一开始,需要设置MAC地址,但没有标准的HCI命令来设置它。

  • 语音的SCO数据既可以通过HCI接口传输,也可以通过芯片组上的显式PCM / I2S接口传输。大多数芯片组默认使用PCM / I2S接口。要通过USB或免提配置文件中的宽带语音使用它,需要将数据传送到主机MCU。较新的蓝牙标准定义了用于配置SCO路由的HCI命令,但是到目前为止我们测试的芯片组中没有实现它。相反,这也是以特定于供应商的方式配置的。

  • 此外,大多数供应商允许通过向芯片组发送自定义命令来在运行时修补或配置其芯片组。显然,这也取决于供应商。

文档和支持

各种蓝牙芯片组提供商之间的开发人员文档和支持水平差异很大。

根据我们的经验,只有德州仪器和EM Microelectronics直接在其网站上提供所有相关信息。Nordic Semiconductor没有正式使用带有HCI接口的蓝牙芯片组,但是他们的nRF5系列文档是完整的,信息非常丰富。TI和Nordic还通过各自的网络论坛提供出色的支持。

Broadcom的蓝牙+ Wifi部门已被赛普拉斯半导体公司收购,据我们所知,它仅向大客户提供开发人员文档。可以加入他们的社区论坛并下载WICED SDK。WICED SDK针对Wifi +蓝牙组合芯片组,包含必要的芯片组补丁文件。

已被高通公司收购的CSR在签署保密协议后在其支持网站上提供所有相关信息。

芯片组概述

芯片组

类型

人体交通运输

BD_ADDR(1)

SCO over HCI(2)

LE DLE

多个LE角色

BTstack文件夹

评论

Atmel ATWILC3000

LE

H4

不知道

没有

没有

atwilc3000

BLE固件大小:60 kB

Broadcom UART

双模式

H4,H5

很少

部分(2)

没有

也许(3)

BCM

最大UART波特率为2 mbps

Broadcom USB Dongles

双模式

USB

没有

没有

BCM

 

CSR UART

双模式

H4,H5,BCSP

很少

部分(2)

没有

没有

企业社会责任

 

CSR USB加密狗

双模式

USB

大多

没有

没有

企业社会责任

 

赛普拉斯CYW20704 / 7

双模式

H4,H5,USB

不知道

部分(2)

BCM

 

赛普拉斯CYW20819

双模式

H4,H5,USB

不知道

部分(2)

BCM

在电源循环期间保持CTS为高电平

赛普拉斯PSoC 4

LE

H4

不知道

不知道

 

HCI固件是PSoC Creator套件示例的一部分

对话DA14581

LE

H4,SPI

没有

没有

没有

da14581

BTstack中包含官方HCI固件

Dialog DA14585

LE

H4,SPI

没有

da14581

BTstack中包含官方HCI固件

Dialog DA1469x

LE

H4,SPI

没有

da14581

DA14固件是DA1469x SDK的一部分

Espressif ESP32

双模式

VHCI

还没

 

SoC具有蓝牙和Wifi

EM 9301

LE

SPI,H4

没有

没有

没有

em9301

自定义HCI SPI实现

EM 9304

LE

SPI,H4

em9301

自定义HCI SPI实现

英特尔双无线8260,8265

双模式

USB

大概

不知道

不知道

英特尔

固件大小:400 kB

北欧nRF

LE

H4

固定随机

 

需要HCI固件

STM STLC2500D

经典

H4

没有

不知道

stlc2500d

不支持自定义深度睡眠管理

东芝TC35661

双模式

H4

没有

没有

没有

没有

tc3566

仅-007/009型号提供完整的HCI。见下文

TI CC256x,WL183x

双模式

H4,H5,eHCILL

没有

适用于CC256XC

cc256x

还有WL185x,WL187x和WL189x

备注:

  1. BD_ADDR:如果蓝牙芯片组符合其自己的有效MAC Addess,则表示存在。更好的Broadcom和CSR加密狗通常带有加密狗制造商的MAC地址,但更便宜的加密狗可能带有相同的地址。

  2. SCO over HCI:所有Bluetooth Classic芯片组通常支持SCO over HCI。BTstack可以毫无问题地接收SCO数据包。但是,只有TI CC256x支持在Controller中使用SCO缓冲区和有用的流控制。在CSR / Broadcom /赛普拉斯控制器上,BTstack无法在Controller中排队多个SCO数据包。相反,必须在正确的时间定期发送SCO数据包 - 没有明确指示何时。当前实现观察所接收的SCO分组的时间戳以调度发送分组。由于可以完全控制系统而没有其他蓝牙数据,因此可以完美无缺,但总的来说它非常脆弱。对于这些,必须使用I2S / PCM接口以稳定运行。,对于标有“否”的人,我们要么没有尝试,要么没有'

  3. 多个LE角色:Apple在其iOS设备中使用Broadcom蓝牙+ Wifi,较新的iOS版本支持多个并发LE角色,因此至少有一些Broadcom模型支持多个并发LE角色。

爱特梅尔/ Microchip的

ATILC3000蓝牙/ Wifi组合控制器已在Atmel / Microchip的嵌入式设备上与Linux一起使用。可以从GitHub存储库获得驱动程序和文档。ATWILC3000具有存储在ROM中的基本HCI实现,并且需要在可以使用之前上载固件映像。BLE控制器符合QDID 99659标准。请注意:BLE固件大约为60 kB。它可能还需要一个单独的Wifi固件。

虽然所有芯片组都存储了官方地址,但可以使用特定于供应商的命令设置BD Addr。BD_ADDR查找结果为“Newport Media Inc.” 该公司于2014年被Atmel收购。

可以使用自定义命令设置波特率。

BTstack集成:btstack_chipset_atwilc3000.c包含将蓝牙固件映像下载到ATWILC3000的RAM中的代码。之后,BTstack通常可以使用它。

Broadcom / Cypress Semiconductor

在赛普拉斯半导体接管Broadcom Wifi +蓝牙部门之前,无法以低数量购买Broadcom芯片组。然而,像Ampak这样的模块制造商创建了包含Broadcom BCM芯片组(蓝牙以及蓝牙+ Wifi组合)的模块,这些模块可能已经过FCC和类似认证的预测试。

一个流行的例子是Ampak AP6212A模块,它包含一个BCM 43438A1,用于Raspberry Pi 3,RedBear Duo和RedBear IoT pHAT,用于较旧的Raspberry Pi模型。

CYW20704 A2控制器同时支持DLE和多个LE角色,例如可从LairdTech获得UART模块(BT860),USB模块(BT850)和USB加密狗。

有趣的是,CYW20704表现出与CC2564相同的UART流量控制错误。您可以添加ENABLE_CYPRESS_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND以激活变通方法和/或阅读下面TI部分中的错误和工作表描述。

到目前为止,关于供应商特定命令的文档的最佳来源是来自Android的blueZ和Bluedroid蓝牙堆栈的源代码,但是随着赛普拉斯的接管,可以直接获得文档。

Broadcom USB加密狗不需要特殊配置,但默认情况下SCO数据不通过USB路由。

可以使用PSoC Creator Kit示例中的“BLE DTM”HCI固件对PSoC 4 SoC进行编程。UART波特率设置为115200.对于更高的波特率,时钟可能需要以不同方式配置,因为IDE会对此发出警告。

CYW20819可用作赛普拉斯蓝牙堆栈的SoC。要将其用作HCI H4上的常规蓝牙控制器,必须在上电/复位期间置位CTS。

Init脚本:对于UART连接的芯片组,必须在上电后上载init脚本。对于在Broadcom Wifi +蓝牙组合中使用的蓝牙芯片组,此文件通常可以在Linux发行版中找到,其结尾为“.hcd”,或者作为包含init脚本的C源文件的WICED SDK的一部分。没有文件系统的数据阵列。

要查找正确的文件,Broadcom芯片组会在询问其本地名称时返回其型号。

BTstack支持以两种变体上传init脚本:使用在posix-h4端口中按名称查找的.hcd文件,以及通过链接到WICED端口中的init脚本。在处理init脚本时,芯片组RTS线变高,但是在发送init脚本的最后一个命令的命令完成事件后仅2 ms。在收到最后一条命令的命令完成事件后,BTstack等待10 ms,以避免在RTS变为高电平且命令失败之前发送。

可以使用自定义命令设置BD Addr。某些模块(例如AP6212A)提供固定地址,但其他模块则不提供。

可以使用bluez源中的自定义命令配置SCO数据。它适用于USB芯片组。芯片组不实现BTstack用于UART连接设备的SCO流控制。一个论坛建议尽可能快地发送SCO数据包,因为两个方向具有相同的恒定速度。

可以使用自定义命令设置波特率。上传init脚本后,在热启动期间波特率会重置。因此,整体方案是这样的:从默认波特率开始,获取本地版本信息,发送自定义Broadcom波特率更改命令,等待响应,将本地UART设置为高波特率,然后发送init脚本。从init脚本发送最后一个命令后,重置本地UART。最后,发送自定义波特率更改命令,等待响应,并将本地UART设置为高波特率。

BTstack集成:所有Broadcom芯片组的通用代码由btstack_chipset_bcm.c提供。在设置过程中,btstack_chipset_bcm_instance函数用于获取btstack_chipset_t实例并传递给hci_init函数。

对于USB加密狗和UART连接,SCO数据可以通过HCI路由,但BTstack不支持UART连接的流量控制。通过I2C / PCM引脚支持HSP和HFP窄带语音。

CSR / Qualcomm Incorporated

CSR plc已于2015年8月被高通公司收购。

与Broadcom类似,文档的最佳来源是blueZ的源代码。

CSR USB加密狗不需要特殊配置,默认情况下SCO数据通过USB路由。

CSR芯片组通常不需要实际的init脚本,但它们允许通过所谓的PSKEY配置芯片组。设置一个或多个PSKEY后,热重置会激活新设置。

BD Addr可以通过PSKEY设置。如果芯片组具有某种持久存储器来存储它,则可以提供固定地址。大多数USB蓝牙适配器都有固定的BD ADDR。

可以通过一组PSKEY配置SCO数据。我们还无法通过HCI为SCO数据路由UART连接。

波特率可以设置为初始配置的一部分,并通过热复位激活。

BTstack集成:所有Broadcom芯片组的通用代码由btstack_chipset_csr.c提供。在设置过程中,btstack_chipset_csr_instance函数用于获取btstack_chipset_t实例并传递给hci_init函数。波特率在常规配置期间设置。

SCO数据通过HCI路由到USB加密狗,但不用于UART连接。通过I2C / PCM引脚支持HSP和HFP窄带语音。

Dialog Semiconductor

Dialog Semiconductor提供DA14581,这是一款仅支持LE的SoC,可以使用HCI固件进行编程。HCI固件可以在启动时上载到SRAM中,也可以存储在OTP(一次性可编程)存储器中,也可以存储在外部SPI中。

它不实现数据长度扩展或支持多个并发角色。

较新的DA14585使用与581型号相同的固件上载机制。此外,它还支持数据长度扩展以及多个并发角色。

更新的DA1469x使用外置闪光灯。DA 1469x SDK包含一个HCI固件,可以使用SmartSnippets Studio编译并下载到闪存中。

BD Addr固定为80:EA:CA:00:00:01。HCI固件中没有命令以不同方式设置它。可以使用随机地址。

波特率:使用提供的固件将波特率固定为115200。通过重新编译HCI固件可以实现更高的波特率。

BTstack集成:btstack_chipset_da14581.c包含将提供的HCI固件下载到DA1458x的SRAM中的代码。之后,它可以用作任何其他HCI芯片组。DA1469x无需特殊支持。

Espressif ESP32

ESP32是一款SoC,内置双模蓝牙和Wifi收音机。HCI控制器以软件实现,并通过所谓的虚拟HCI(VHCI)接口访问。它支持LE数据长度扩展(DLE)以及多个LE角色。目前不支持SCO,但Espressif正在研究它。

蓝牙/ Wifi共存直到最近才起作用,似乎已经修复

EM Microelectronic Marin

长期以来,EM9301一直是唯一具有HCI接口的蓝牙单模LE芯片组。EM9301可通过SPI或UART连接。UART接口不支持硬件流控制,不建议与BTstack一起使用。如果EM9301有数据要发送,SPI模式使用专有但有记录的扩展来实现流量控制和信号。

2016年12月,EM发布了新的EM9304,它还具有HCI模式,并增加了对可选蓝牙4.2的支持。特征。它支持数据长度扩展和最多8个LE角色。EM9304是一个更大的MCU,允许在其上运行自定义代码。为此,支持将配置和固件上载到RAM或128 kB的一次性可编程区域的高级机制。它支持EM9301的供应商特定命令的超集。

EM9304由BTstack中的'stm32-l053r8-em9304'端口使用。port.c文件还包含数据表中指定的SPI H4协议的IRQ + DMA驱动实现。

必须在启动期间为EM9301设置BD Addr,因为它没有存储的修复地址。EM9304带有存储在OTP中的有效地址。

不支持SCO数据,因为它仅限LE。

可以为UART模式设置波特率。对于SPI,主器件通过SPI时钟线控制速度。3.3V,支持16 Mhz。

虽然可以将小型固件补丁上传到RAM或OTP内存(仅限EM9304),但不需要Init脚本。

BTstack集成:EM9304的通用代码由btstack_chipset_em9301.c提供。在设置过程中,btstack_chipset_em9301_instance函数用于获取btstack_chipset_t实例并传递给hci_init函数。它可以在启动期间设置BD Addr。

英特尔双无线8260,8265

Wifi /蓝牙组合卡主要用于移动计算机。蓝牙部分需要上载固件文件和配置文件。SCO,DLE,未测试多个角色。

北欧nRF5系列

Nordic nRF5系列芯片组的单模LE芯片组通常没有HCI接口。相反,它们提供LE蓝牙堆栈作为二进制库,即所谓的SoftDevices。开发人员可以在此库上编写蓝牙应用程序。由于芯片组可以编程,因此它还可以加载固件,为主机提供常规的HCI H4接口。

nRF5芯片组的一个有趣特性是它们可以同时支持多个LE角色,例如,在一个连接中为中心,在另一个连接中为外设。此外,nRF52 SoftDevice实现支持蓝牙4.2数据长度扩展。

nRF5系列,nRF51和nRF52都可以与HCI固件一起使用。nRF51目前(2016年11月18日)不支持加密连接,尽管这也可能得到支持。

BD ADDR未自动设置。但是,在生产期间,每个芯片中存储一个64位随机数。Nordic在其SoftDevice实现中将此随机数用作随机静态地址。

不支持SCO数据,因为它仅限LE。

虽然可以扩展固件以支持波特率更改,但是通过补丁将波特率固定为115200。

不需要Init脚本。

BTstack集成:支持与西风控制器nRF5芯片组提供btstack_chipset_zephyr.c。它在init期间查询静态随机地址。

要在BTstack中使用这些芯片组,您需要安装arm-none-eabi gcc工具链和nRF5x命令行工具。J-Link驱动程序,检查Zephyr项目,应用最小补丁来帮助使用随机静态地址,并将其闪存到芯片组上:

  • 安装J-Link软件和文档包。

  • 将nrfjprog作为nRFx-Command-Line-Tools的一部分。单击顶部的“下载”选项卡,查找您的操作系统。

  • Checkout Zephyr并安装工具链。我们建议使用arm-non-eabi gcc二进制文件,而不是自己编译它。至少在OS X上,这对我们来说是失败的。

  • 在samples / bluetooth / hci_uart中编译nRF52 Dev Kit的固件

$ make BOARD=nrf52_pca10040

  • 上传固件

    $ ./flash_nrf52_pca10040.sh

  • 对于nRF51开发套件,使用make BOARD=nrf51_pca10028和./flash_nrf51_10028.sh与nRF51套件。

  • nRF5开发套件用作带H4接口的LE HCI控制器。

意法半导体

意法半导体提供支持SPI和UART H4连接的蓝牙V2.1 + EDR芯片组STLC2500D。

尽管所有芯片组都存储了官方地址,但可以使用自定义命令设置BD Addr。

SCO数据可能有用。我们没试过。

可以使用自定义命令设置波特率。芯片组的波特率变化发生在0.5秒内。至少在BTstack上,确切知道命令何时通过UART完全发送是非常重要的,因此BTstack在100 ms后切换到新的波特率,以期望命令响应新的速度。

尽管可以上载固件补丁,但不需要Init脚本。

BTstack集成:支持的STLC2500C通过提供btstack_chipset_stlc.c。在设置过程中,btstack_chipset_stlc2500d_instance函数用于获取btstack_chipset_t实例并传递给hci_init函数。它可以实现更高的UART波特率,并在启动期间设置BD Addr。

德州仪器CC256x系列

德州仪器CC256x系列目前处于第四次迭代,提供仅经典(CC2560),双模(CC2564)和经典+ ANT(CC2567)型号。双模式芯片组的一种变体也集成在WL183x,WL185x,WL187x和WL189x系列的TI WiLink 8 Wifi +蓝牙组合模块中。后者中的一些也支持ANT。

CC256x芯片组通过UART连接进行连接,支持H4,H5(自第三次迭代)和eHCILL。

最新一代CC256xC芯片组并行支持多种LE角色。

可以通过hci_read_local_version_information命令返回的LMP Subversion识别不同的CC256x芯片组。TI还使用数字方式(AKA)来识别其芯片组。该表显示了CC256x和WL18xx系列的LMP Subversion和AKA编号。

芯片组

LMP Subversion

AKA

CC2560

0x191f

31年2月6日

CC2560A,CC2564,CC2567

0x1B0F

6.6.15

CC256xB

0x1B90

6.7.16

CC256xC

0x9a1a

26年6月12日

WL18xx

0xac20

32年8月11日

SCO数据路由到I2S / PCM接口,但可以使用HCI_VS_Write_SCO_Configuration命令进行配置。

可以使用HCI_VS_Update_UART_HCI_Baudrate设置波特率。芯片组通过命令完成事件确认更改,然后将本地UART设置为新速度。奇怪的是,CC256x芯片组在此特定命令完成响应期间忽略了传入的CTS线路。

如果您已经实现了hal_uart_dma.h而没有额外的环形缓冲区(如建议的那样!)并且您有一点延迟,例如由于RTOS上的线程切换,这可能会导致UART溢出。如果发生这种情况,BTstack通过在您的btstack_config.h中添加#define ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND,在HCI H4传输实现中提供了一种解决方法。如果启用此选项,H4传输层将采用“深度数据包检查”来首先检查其是否为TI控制器,然后等待HCI_VS_Update_UART_HCI_Baudrate。检测到后,它将调整下一个UART读取以期望HCI命令完成事件。

尽管所有芯片组都存储了官方地址,但可以使用HCI_VS_Write_BD_Addr设置BD Addr。

Init脚本。为了使用CC256x芯片组,必须获取初始化脚本并将其转换为C文件以与BTstack一起使用。对于较新的版本,TI提供了需要组合的main.bts和ble_add_on.bts。

在Makefile 芯片组/ cc256x / Makefile.inc能够自动下载和转换请求的文件。它通过以下方式实现:

  • 下载芯片组的一个或多个BTS文件。

  • 运行Python脚本:

./convert_bts_init_scripts.py main.bts [ble_add_on.bts] output_file.c

BTstack集成:所有CC256x芯片组的通用代码由btstack_chipset_cc256x.c提供。在设置过程中,btstack_chipset_cc256x_instance函数用于获取btstack_chipset_t实例并传递给hci_init函数。btstack_chipset_cc256x_lmp_subversion为所选的init脚本提供LMP Subversion。

SCO数据可以通过HCI路由,因此支持HFP宽带语音。

东芝

东芝TC35661双模芯片组有三种型号可供选择:独立式。二进制蓝牙堆栈,作为具有嵌入式堆栈或常规HCI接口的模块。对于较新的硅,HCI变体具有型号TC35661-007和TC35561-009。

我们首先尝试了包含USB-to-UART适配器的USB评估棒和包含TC35661 -501的PAN1026模块。虽然它支持HCI接口并且Bluetooth Classic操作按预期工作,但不支持LE HCI命令。使用-007和-009型号,一切都按预期工作。

似乎不支持SCO数据。

可以使用自定义命令设置波特率。

必须使用自定义命令设置BD Addr。它没有存储的有效公共BD Addr。

不需要Init脚本。可能会上载补丁文件。

BTstack整合:为TC35661系列支持由提供btstack_chipset_tc3566x.c。在设置过程中,btstack_chipset_tc3566x_instance函数用于获取btstack_chipset_t实例并传递给hci_init函数。它可以实现更高的UART波特率,并在启动期间设置BD Addr。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝牙协议栈(六、芯片组) 的相关文章

  • Python学习记录-----批量发送post请求

    昨天学了一天的Python xff08 我的生产语言是java xff0c 也可以写一些shell脚本 xff0c 算有一点点基础 xff09 xff0c 今天有一个应用场景 xff0c 就正好练手了 这个功能之前再java里写过 xff0
  • 找不到系统安全日志/var/log/secure文件的问题

    今天打算配置一个服务器防止暴力破解的脚本 xff0c 原理不复杂 xff0c 搜索登录错误超过一定次数的ip地址 xff0c 加入防火墙 xff0c 但是在找登录日志的时候出现了问题 一般服务器的ssh登录等操作日志都是 var log s
  • osx多用户设置共享文件夹(MacBook)

    mac平台有很方便的多用户系统 xff08 Unix你懂的 xff09 我本人就一直在使用两个账户 xff0c 各有分工 xff0c 权限不同 有时候我们在一个账户下下载或者使用的文件 xff0c 也需要在另一个账户上使用 xff0c 这就
  • MySQL DROP TABLE操作以及 DROP 大表时的注意事项

    语法 xff1a 删表 sql view plain copy DROP TABLE Syntax DROP TEMPORARY TABLE IF EXISTS tbl name tbl name RESTRICT CASCADE 可一次删
  • python日期操作类

    coding utf 8 39 39 39 获取当前日期前后N天或N月的日期 39 39 39 from time import strftime localtime from datetime import timedelta date
  • ROS运行调用摄像头无法显示的解决办法

    报错 xff1a Unable to open camera calibration file home hri ros camera info head camera yaml 参考 xff1a https github com ros
  • [VC] 冒号(:)与C/C++

    这篇文章将总结C C 43 43 中的冒号的用法 1 位域定义 是C 43 43 里的 作用域分解运算符 比如声明了一个类A xff0c 类A里声明了一个成员函数voidf xff0c 但没有在类的声明里给出f的定义 xff0c 那么在类外
  • TX2入门(1)——开箱上电

    因为实验室有需求 导师购入了一块Jetson TX2开发板 下面就记录一下板子在我手机的应用过程 xff0c 方便以后查找 xff0c 如果也能给大家一些帮助就更好啦 欢迎转载 1 已经提前按照网上各种大神的意见采购好了电源线 HDMI转V
  • TX2入门(3)——ubuntu(包含tx2端)常用命令(持续补充中……)

    emmm xff0c 刷机完成 xff0c 突然发现还有一些常用指令需要整理一下 xff0c 以后查找起来方便 所以 xff0c tensorflow放到下一篇吧 一 系统架构类型 1 查看系统架构 uname a 2 显示操作系统架构类型
  • 使用 sphinx 制作简洁而又美观的文档

    Sphinx 是一种工具 xff0c 它允许开发人员以纯文本格式编写文档 xff0c 以便采用满足不同需求的格式轻松生成输出 这在使用 Version Control System 追踪变更时非常有用 纯文本文档对不同系统之间的协作者也非常
  • 关于C语言的空格符和字符串结束符

    空格 39 39 和结束符 39 0 39 是不一样的 xff0c 但是如果用scanf函数 s的格式输入 xff0c 遇到空格符就会当成结束符
  • 查看Jetson系列产品JetPack的版本信息

    想查看 JetPack 的版本信息 xff0c 网上搜了一下都是要查看 etc nv tegra release 也没说该怎么看和什么意思 图片链接 https www jianshu com p 7f2d8a563ded 查了一下 xff
  • docker run 参数详解

    命令格式 xff1a docker run OPTIONS IMAGE COMMAND ARG Usage Run a command in a new container 中文意思为 xff1a 通过run命令创建一个新的容器 xff08
  • Docker安装Minio

    寻找Minio镜像 Docker Hub 查找官方镜像 下载Minio镜像 下载最新版Minio镜像 span class token function docker span pull minio minio 等同于 span class
  • Docker安装Nginx

    寻找Nginx镜像 Docker Hub 查找官方镜像 下载Nginx镜像 下载最新版Nginx镜像 span class token function docker span pull nginx 等同于 span class token
  • Docker安装pgAdmin4

    寻找Redis镜像 Docker Hub 查找官方镜像 下载Redis镜像 下载最新版pgAdmin4镜像 span class token function docker span pull dpage pgadmin4 等同于 span
  • SQLServer跨库查询--分布式查询 用openrowset连接远程SQL或插入数据

    如果只是临时访问 可以直接用openrowset 查询示例 select from openrowset SQLOLEDB sql服务器名 用户名 密码 数据库名 dbo 表名 导入示例 select into 表 from openrow

随机推荐

  • ubuntu20 编译dpdk错误 -Werror=address-of-packed-member

    0x0 在ubuntu20上编译dpdk 18 11报错 xff0c gcc 版本为9 3 0 xff0c 报错如下 xff1a error converting a packed const struct ether addr point
  • Docker安装EMQX

    寻找EMQX镜像 Docker Hub 查找官方镜像 下载EMQX镜像 下载最新版EMQX镜像 span class token function docker span pull emqx emqx 等同于 span class toke
  • Aspose.Cells中文版文档

    Aspose Cells相应操作 1 上传 1 1 Workbook Workbook workBook 61 new Workbook 属性 名称 值类型 说明 Colors Color 获取或设置Excel颜色 ConvertNumer
  • expdp/impdp 详细参数解释

    数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传输 数据对象的机制 该实用程序可以使用以下命令进行调用 示例 expdp scott tiger DIRECTORY 61 dmpdir DUMPFILE 61 scott dm
  • MSDN,我告诉你

    VS MSSQL Windows Windows Server等下载地址均为电骡下载地址 http msdn itellyou cn
  • ASP.NET MVC 4 插件化架构简单实现-思路篇

    用过和做过插件的都会了解插件的好处 xff0c 园子里也有很多和讨论 xff0c 但大都只些简单的加载程序集什么的 xff0c 这里主要讨论的就是使用 ASP NET MVC 4 来实现每个插件都可以完全从主站点剥离出来 xff0c 即使只
  • Quartz.NET 2.0 学习笔记(4) :cron表达式

    Quartz NET 项目地址 http quartznet sourceforge net Quartz NET 2 0 学习笔记 1 xff1a Quartz NET简介 Quartz NET 2 0 学习笔记 2 xff1a 和1 0
  • 修改oracle用户密码永不过期

    1 以在SQL Plus下以DBA身份登陆 用户名 密码 64 服务器SID as sysdba 方法一 xff1a xff08 注意必须用双引号把后面的引上 xff09 C Documents and Settings ssy gt sq
  • Log4Net记录日志到数据库启动24小时后将无法向mysql数据库插入数据

    最近用Log4Net做成服务把日志记录到MySql数据库可是发现可以个奇怪的的问题 xff0c 每过一个晚上Log4Net就不会自动向MySql 数据库记录日志 xff0c 后来经过多方面测试发现 这个问题主要是Mysql会把空闲8小时 x
  • Mysql 密码过期导致无法登陆

    1 停止当前mysql服务 2 mysqld defaults file 61 34 C ProgramData MySQL MySQL Server 5 7 my ini 34 skip grant tables 一定是my ini 我一
  • 上拉电阻 以及 阻抗匹配

    如上图 xff0c 这是UART通信部分原理图 xff0c 先分析一下TX0部分的电路 xff0c 图上TX0是从芯片直接引出来 xff0c 左边四PIN的J7是接到外部设备的插针 xff0c 当TX0输出低电平时 xff0c 由于D2阳极
  • 计算机网络实践

    计算机网络实践 第一章 计算机基本命令 一 网线制作 材料 xff1a 双绞线 xff08 8根线两两绞在一起为减弱电磁干扰 xff09 xff1b 水晶头 xff1b 压线钳双绞线测试仪 制作过程 xff1a 用压线钳将双绞线一端的灰色表
  • 1.FreeRTOS操作系统简介

    1 1 FreeRTOS是什么 xff1f 操作系统 xff08 operation system 简称OS xff09 xff1a 是管理计算机硬件和软件资源的计算机程序 实时操作系统 xff08 Real Time Operating
  • ROS运行python脚本报错ImportError: No module named srv

    最近又写了个ROS xff08 robot operating system xff09 包 xff0c 格式照抄之前的包 xff0c 结构如下 xff1a haipeng 64 wang catkin ws src tree net ma
  • Git如何修改commit信息

    一 git 如何修改最近一次的commit信息 1 git commit amend 2 进入vim操作界面之后 点击字母键 i 然后进入INSERT模式 xff0c 然后对commit信息进行修改 xff0c 然后ESC 然后 wq 保存
  • vscode下git的常见操作

    目录 一 第一次从git下载代码 xff0c 前期流程 二 输入相关命令 xff1a 2 1 下载master分支代码 xff1a 2 2 下载dev分支的代码 2 3 服务器新建了新的分支 xff0c 本地刷新分支 一 第一次从git下载
  • ubuntu配置novnc通过web访问服务器

    希望通过vnc去连接主机去看控制服务器系统 xff0c 集成到web中使用 novnc是一种选择 环境如下 xff0c 两个主机host1 host2 xff0c web装载81 224中 xff0c 环境使用的Ubuntu 16 04 具
  • 简单的命令快速下载远程各种docker 镜像 github 库,各种软件资料。

    做研究开发和项目实战中经常要下载国外的docker镜像和软件源代码 xff0c 软件安装包 xff0c 这个过程如果子国外的服务器上执行 xff0c 一般不会超过10秒 xff0c 如果在中国境内的机器上执行 xff0c 一般要5分钟甚至几
  • 字节序(byte order)、比特序(bit order)、MSB/LSB、大端模式/小端模式 概念误混淆

    发现之前概念一直混淆 xff0c 今天就理清楚以作备忘 前提 xff1a 内存的读写永远从低地址开始读 写 xff0c 从低到高 xff01 从低到高 xff01 从低到高 xff01 内存的读写永远从低地址开始读 写 xff01 xff0
  • 蓝牙协议栈(六、芯片组)

    在本章中 xff0c 我们首先解释蓝牙芯片组如何物理连接 xff0c 然后提供有关流行的蓝牙芯片组及其与BTstack一起使用的信息 HCI接口 主机 xff08 计算机或MCU xff09 与主机控制器 xff08 实际蓝牙芯片组 xff