ESP32蓝牙Bluetooth Controller API介绍

原创 专注于无线通信的蓬勃 2022-04-22 21:27

前言:

本文章主要介绍下ESP32 蓝牙controller的API,通过此文章你将会有以下收获:

1)ESP32的蓝牙架构

2)ESP32蓝牙controller API的使用

零. 声明


本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对ESP-IDF开发有一个总体的认识,比我们后续学习打下基础!

第二篇:ESP32-IDF外设驱动介绍,主要会根据esp-idf现有的driver,提供各个外设的驱动,比如LED,OLED,SPI LCD,TOUCH,红外,Codec ic等等,在这一篇中,我们不仅仅来做外设驱动,还会对常用的外设总线做一个介绍,让大家知其然又知其所以然!

第三篇:目前比较火热的GUI LVGL介绍,主要会设计LVGL7.1,LVGL8的移植介绍,并且也会介绍各个组件,知道原理后,最后,我们会推出一款组态软件来构建我们的GUI,来提升我们的效率!

第四篇:ESP32-蓝牙,熟悉我的,应该都知道,我即使从事蓝牙协议栈的开发的,所以这个是我们独有的优势,在这一篇章,我们会提供不仅仅是蓝牙应用方法的知识,也会应用结合蓝牙底层协议栈的理论,让你彻底从上到下打通蓝牙任督二脉!

第五篇:Wi-Fi介绍,熟悉我的,应该也知道,我们也做过一款sdio wifi的驱动教程板子,所以在wifi这方面我们也是有独有的优势,在这一篇章,我们同样不仅仅提供Wi-Fi应用方面的知识,也会结合底层理论,让你对Wi-Fi有一个清晰的认知!

另外,我们的教程包括但是不局限于以上篇章,为了给你一个更好的导航,以下信息尤其重要,请详细查看!!

------------------------------------------------------------------------------------------------------------------------------------------

购买开发板(点击我)

文档目录(点击我)

Github代码仓库(点击我)

蓝牙交流扣扣群:539357317

微信公众号↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

​​​​

------------------------------------------------------------------------------------------------------------------------------------------

一.概述

在前面的章节中,我们看了ESP32的蓝牙架构,如下图所示

我们本章节就来介绍下蓝牙controller相关的API,API文档链接如下:

Controller && VHCI - ESP32 - — ESP-IDF 编程指南 v4.4.1 文档

遗憾的是:ESP32不开放Controller的source code,所以我们只能看API docu!

二. API介绍

controller部分的API在bt/include/esp32/include/esp_bt.h 文件中

esp_err_t esp_ble_tx_power_set (esp_ble_power_type_t power_type, esp_power_level_t power_level)

作用:设置BLE的tx power,分为广播/搜索/连接的,连接的TX power只能在连接后使用

参数1: power_type

tx power的类型

typedef enum {

ESP_BLE_PWR_TYPE_CONN_HDL0 = 0, /*!< For connection handle 0 */

ESP_BLE_PWR_TYPE_CONN_HDL1 = 1, /*!< For connection handle 1 */

ESP_BLE_PWR_TYPE_CONN_HDL2 = 2, /*!< For connection handle 2 */

ESP_BLE_PWR_TYPE_CONN_HDL3 = 3, /*!< For connection handle 3 */

ESP_BLE_PWR_TYPE_CONN_HDL4 = 4, /*!< For connection handle 4 */

ESP_BLE_PWR_TYPE_CONN_HDL5 = 5, /*!< For connection handle 5 */

ESP_BLE_PWR_TYPE_CONN_HDL6 = 6, /*!< For connection handle 6 */

ESP_BLE_PWR_TYPE_CONN_HDL7 = 7, /*!< For connection handle 7 */

ESP_BLE_PWR_TYPE_CONN_HDL8 = 8, /*!< For connection handle 8 */

ESP_BLE_PWR_TYPE_ADV = 9, /*!< For advertising */

ESP_BLE_PWR_TYPE_SCAN = 10, /*!< For scan */

ESP_BLE_PWR_TYPE_DEFAULT = 11, /*!< For default, if not set other, it will use default value */

ESP_BLE_PWR_TYPE_NUM = 12, /*!< TYPE numbers */

} esp_ble_power_type_t;

参数2: power_level

tx power的级别

typedef enum {

ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */

ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */

ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */

ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */

ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */

ESP_PWR_LVL_P3 = 5, /*!< Corresponding to 3dbm */

ESP_PWR_LVL_P6 = 6, /*!< Corresponding to 6dbm */

ESP_PWR_LVL_P9 = 7, /*!< Corresponding to 9dbm */

ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */

ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */

ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */

ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */

ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */

ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to 1dbm will actually result to 3dbm */

ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to 4dbm will actually result to 6dbm */

ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to 7dbm will actually result to 9dbm */

} esp_power_level_t;

返回值: esp_err_t

typedef int esp_err_t;

/* Definitions for error constants. */

#define ESP_OK 0 /*!< esp_err_t value indicating success (no error) */

#define ESP_FAIL -1 /*!< Generic esp_err_t code indicating failure */

#define ESP_ERR_NO_MEM 0x101 /*!< Out of memory */

#define ESP_ERR_INVALID_ARG 0x102 /*!< Invalid argument */

#define ESP_ERR_INVALID_STATE 0x103 /*!< Invalid state */

#define ESP_ERR_INVALID_SIZE 0x104 /*!< Invalid size */

#define ESP_ERR_NOT_FOUND 0x105 /*!< Requested resource not found */

#define ESP_ERR_NOT_SUPPORTED 0x106 /*!< Operation or feature not supported */

#define ESP_ERR_TIMEOUT 0x107 /*!< Operation timed out */

#define ESP_ERR_INVALID_RESPONSE 0x108 /*!< Received response was invalid */

#define ESP_ERR_INVALID_CRC 0x109 /*!< CRC or checksum was invalid */

#define ESP_ERR_INVALID_VERSION 0x10A /*!< Version was invalid */

#define ESP_ERR_INVALID_MAC 0x10B /*!< MAC address was invalid */

#define ESP_ERR_WIFI_BASE 0x3000 /*!< Starting number of WiFi error codes */

#define ESP_ERR_MESH_BASE 0x4000 /*!< Starting number of MESH error codes */

#define ESP_ERR_FLASH_BASE 0x6000 /*!< Starting number of flash error codes */

#define ESP_ERR_HW_CRYPTO_BASE 0xc000 /*!< Starting number of HW cryptography module error codes */

esp_power_level_t esp_ble_tx_power_get(esp_ble_power_type_t power_type)

作用:根据特定的tx power类型,来获取ble tx power的等级

参数1:power_type

tx power的级别

typedef enum {

ESP_BLE_PWR_TYPE_CONN_HDL0 = 0, /*!< For connection handle 0 */

ESP_BLE_PWR_TYPE_CONN_HDL1 = 1, /*!< For connection handle 1 */

ESP_BLE_PWR_TYPE_CONN_HDL2 = 2, /*!< For connection handle 2 */

ESP_BLE_PWR_TYPE_CONN_HDL3 = 3, /*!< For connection handle 3 */

ESP_BLE_PWR_TYPE_CONN_HDL4 = 4, /*!< For connection handle 4 */

ESP_BLE_PWR_TYPE_CONN_HDL5 = 5, /*!< For connection handle 5 */

ESP_BLE_PWR_TYPE_CONN_HDL6 = 6, /*!< For connection handle 6 */

ESP_BLE_PWR_TYPE_CONN_HDL7 = 7, /*!< For connection handle 7 */

ESP_BLE_PWR_TYPE_CONN_HDL8 = 8, /*!< For connection handle 8 */

ESP_BLE_PWR_TYPE_ADV = 9, /*!< For advertising */

ESP_BLE_PWR_TYPE_SCAN = 10, /*!< For scan */

ESP_BLE_PWR_TYPE_DEFAULT = 11, /*!< For default, if not set other, it will use default value */

ESP_BLE_PWR_TYPE_NUM = 12, /*!< TYPE numbers */

} esp_ble_power_type_t;

返回值:power_level

typedef enum {

ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */

ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */

ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */

ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */

ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */

ESP_PWR_LVL_P3 = 5, /*!< Corresponding to 3dbm */

ESP_PWR_LVL_P6 = 6, /*!< Corresponding to 6dbm */

ESP_PWR_LVL_P9 = 7, /*!< Corresponding to 9dbm */

ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */

ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */

ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */

ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */

ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */

ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to 1dbm will actually result to 3dbm */

ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to 4dbm will actually result to 6dbm */

ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to 7dbm will actually result to 9dbm */

} esp_power_level_t;

esp_err_t esp_bredr_tx_power_set(esp_power_level_t min_power_level, esp_power_level_t max_power_level)

作用:设置BR/EDR的tx power,这个函数会作用于整个传统蓝牙,包括搜索,paging,连接等,一定要在esp_bt_controller_enable函数之后以及在RF做TX的动作之前设置!

参数1:min_power_level

设置tx powr的最小值

typedef enum {

ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */

ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */

ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */

ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */

ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */

ESP_PWR_LVL_P3 = 5, /*!< Corresponding to 3dbm */

ESP_PWR_LVL_P6 = 6, /*!< Corresponding to 6dbm */

ESP_PWR_LVL_P9 = 7, /*!< Corresponding to 9dbm */

ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */

ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */

ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */

ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */

ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */

ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to 1dbm will actually result to 3dbm */

ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to 4dbm will actually result to 6dbm */

ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to 7dbm will actually result to 9dbm */

} esp_power_level_t;

参数2:max_power_level

设置tx powr的最大值

typedef enum {

ESP_PWR_LVL_N12 = 0, /*!< Corresponding to -12dbm */

ESP_PWR_LVL_N9 = 1, /*!< Corresponding to -9dbm */

ESP_PWR_LVL_N6 = 2, /*!< Corresponding to -6dbm */

ESP_PWR_LVL_N3 = 3, /*!< Corresponding to -3dbm */

ESP_PWR_LVL_N0 = 4, /*!< Corresponding to 0dbm */

ESP_PWR_LVL_P3 = 5, /*!< Corresponding to 3dbm */

ESP_PWR_LVL_P6 = 6, /*!< Corresponding to 6dbm */

ESP_PWR_LVL_P9 = 7, /*!< Corresponding to 9dbm */

ESP_PWR_LVL_N14 = ESP_PWR_LVL_N12, /*!< Backward compatibility! Setting to -14dbm will actually result to -12dbm */

ESP_PWR_LVL_N11 = ESP_PWR_LVL_N9, /*!< Backward compatibility! Setting to -11dbm will actually result to -9dbm */

ESP_PWR_LVL_N8 = ESP_PWR_LVL_N6, /*!< Backward compatibility! Setting to -8dbm will actually result to -6dbm */

ESP_PWR_LVL_N5 = ESP_PWR_LVL_N3, /*!< Backward compatibility! Setting to -5dbm will actually result to -3dbm */

ESP_PWR_LVL_N2 = ESP_PWR_LVL_N0, /*!< Backward compatibility! Setting to -2dbm will actually result to 0dbm */

ESP_PWR_LVL_P1 = ESP_PWR_LVL_P3, /*!< Backward compatibility! Setting to 1dbm will actually result to 3dbm */

ESP_PWR_LVL_P4 = ESP_PWR_LVL_P6, /*!< Backward compatibility! Setting to 4dbm will actually result to 6dbm */

ESP_PWR_LVL_P7 = ESP_PWR_LVL_P9, /*!< Backward compatibility! Setting to 7dbm will actually result to 9dbm */

} esp_power_level_t;

返回值:esp_err_t

在前面已经介绍

esp_err_t esp_bredr_tx_power_get(esp_power_level_t *min_power_level, esp_power_level_t *max_power_level)

作用:获取BR/EDR的tx power的最小/大值

参数1:*min_power_level

指针,返回的最小的tx power

在前面已经介绍

参数2:*max_power_level

指针,返回的最大的tx power

在前面已经介绍

返回值:esp_err_t

在前面已经介绍

esp_err_t esp_bredr_sco_datapath_set(esp_sco_data_path_t data_path)

作用:设置BR/EDR的sco的数据通路,应该在controller enable之后调用,并且在(e)SCO链接前建立

参数1:data_path

sco的数据通路

typedef enum {

ESP_SCO_DATA_PATH_HCI = 0, /*!< data over HCI transport */

ESP_SCO_DATA_PATH_PCM = 1, /*!< data over PCM interface */

} esp_sco_data_path_t;

返回值:esp_err_t

在前面已经介绍

esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)

作用:根据config的参数来进行controller的初始化

参数1:*cfg

controller的配置参数

typedef struct {

/*

* Following parameters can be configured runtime, when call esp_bt_controller_init()

*/

uint16_t controller_task_stack_size; /*!< Bluetooth controller task stack size */

uint8_t controller_task_prio; /*!< Bluetooth controller task priority */

uint8_t hci_uart_no; /*!< If use UART1/2 as HCI IO interface, indicate UART number */

uint32_t hci_uart_baudrate; /*!< If use UART1/2 as HCI IO interface, indicate UART baudrate */

uint8_t scan_duplicate_mode; /*!< scan duplicate mode */

uint8_t scan_duplicate_type; /*!< scan duplicate type */

uint16_t normal_adv_size; /*!< Normal adv size for scan duplicate */

uint16_t mesh_adv_size; /*!< Mesh adv size for scan duplicate */

uint16_t send_adv_reserved_size; /*!< Controller minimum memory value */

uint32_t controller_debug_flag; /*!< Controller debug log flag */

uint8_t mode; /*!< Controller mode: BR/EDR, BLE or Dual Mode */

uint8_t ble_max_conn; /*!< BLE maximum connection numbers */

uint8_t bt_max_acl_conn; /*!< BR/EDR maximum ACL connection numbers */

uint8_t bt_sco_datapath; /*!< SCO data path, i.e. HCI or PCM module */

bool auto_latency; /*!< BLE auto latency, used to enhance classic BT performance */

bool bt_legacy_auth_vs_evt; /*!< BR/EDR Legacy auth complete event required to protect from BIAS attack */

/*

* Following parameters can not be configured runtime when call esp_bt_controller_init()

* It will be overwrite with a constant value which in menuconfig or from a macro.

* So, do not modify the value when esp_bt_controller_init()

*/

uint8_t bt_max_sync_conn; /*!< BR/EDR maximum ACL connection numbers. Effective in menuconfig */

uint8_t ble_sca; /*!< BLE low power crystal accuracy index */

uint8_t pcm_role; /*!< PCM role (master & slave)*/

uint8_t pcm_polar; /*!< PCM polar trig (falling clk edge & rising clk edge) */

uint32_t magic; /*!< Magic number */

} esp_bt_controller_config_t;

返回值:esp_err_t

在前面已经介绍

esp_err_t esp_bt_controller_deinit(void)

作用:De-initialize BT controller

esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)

作用:Enable 蓝牙controller

参数1:mode

typedef enum {

ESP_BT_MODE_IDLE = 0x00, /*!< Bluetooth is not running */

ESP_BT_MODE_BLE = 0x01, /*!< Run BLE mode */

ESP_BT_MODE_CLASSIC_BT = 0x02, /*!< Run Classic BT mode */

ESP_BT_MODE_BTDM = 0x03, /*!< Run dual mode */

} esp_bt_mode_t;

返回值:esp_err_t

在前面已经介绍

esp_err_t esp_bt_controller_disable(void)

作用:Disable蓝牙controller

esp_bt_controller_status_t esp_bt_controller_get_status(void)

作用:获取controller的状态

返回值:esp_bt_controller_status_t

typedef enum {

ESP_BT_CONTROLLER_STATUS_IDLE = 0,

ESP_BT_CONTROLLER_STATUS_INITED,

ESP_BT_CONTROLLER_STATUS_ENABLED,

ESP_BT_CONTROLLER_STATUS_NUM,

} esp_bt_controller_status_t;

bool esp_vhci_host_check_send_available(void)

作用:检查是否可以向controller发送数据

void esp_vhci_host_send_packet(uint8_t *data, uint16_t len)

作用:Host发送数据给Controller

参数1: *data

Host准备发送给Controller的数据

参数2: len

Host准备发送给Controller的数据长度

esp_err_t esp_vhci_host_register_callback(const esp_vhci_host_callback_t *callback)

作用:host像controller注册callback函数,包括可发送的callback跟接收数据的callback

参数1:*callback

typedef struct esp_vhci_host_callback {

void (*notify_host_send_available)(void); /*!< callback used to notify that the host can send packet to controller */

int (*notify_host_recv)(uint8_t *data, uint16_t len); /*!< callback used to notify that the controller has a packet to send to the host*/

} esp_vhci_host_callback_t;

返回值:esp_err_t

在前面已经介绍

esp_err_t esp_bt_controller_mem_release(esp_bt_mode_t mode)

作用:释放bt controller的bss,heap数据,节省内存,只能在esp_bt_controller_init函数之前调用或者esp_bt_controller_deinit函数之后调用,一般的用法是你用BR/EDR,那么你就释放BLE,如果你用BLE,那么就释放BR/EDR的

参数1:mode

typedef enum {

ESP_BT_MODE_IDLE = 0x00, /*!< Bluetooth is not running */

ESP_BT_MODE_BLE = 0x01, /*!< Run BLE mode */

ESP_BT_MODE_CLASSIC_BT = 0x02, /*!< Run Classic BT mode */

ESP_BT_MODE_BTDM = 0x03, /*!< Run dual mode */

} esp_bt_mode_t;

返回值:esp_err_t

在前面已经介绍

esp_err_t esp_bt_mem_release(esp_bt_mode_t mode)

作用:释放内存,首先会先调用esp_bt_controller_mem_release函数

esp_err_t esp_bt_sleep_enable(void)

作用:使能bt controller的休眠

esp_err_t esp_bt_sleep_disable(void)

作用:禁止bt controller休眠

esp_err_t esp_ble_scan_dupilcate_list_flush(void)

作用:手动清除BLE scan列表()

我们最常用的就是esp_bt_controller_init/esp_bt_controller_enable/esp_bt_controller_disable/esp_bt_controller_deinit,我们大概来画下这几个函数的流程

专注于无线通信的蓬勃 朝气蓬勃——不积跬步 无以至千里, 不积小流 无以成江海
评论
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 101浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 73浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 112浏览
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 122浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 164浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 150浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 41浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 399浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 182浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 53浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 186浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦