概述
研究关键指令 hciattach
pi:
root@raspberrypi:/# find -name hciattach
./usr/share/bash-completion/completions/hciattach
./usr/bin/hciattach
其实第一个是文件 读一读 读不懂
sudo hciattach -n -s 115200 /dev/serial0 any 115200 flow
http://www.voidcn.com/article/p-minmxows-rr.html
看到这句话
if (!strcmp("flow", argv[optind]))
u->flags|= FLOW_CTL; //uart flag 流控制标志
else
u->flags&= ~FLOW_CTL;
那么
sudo hciattach -s 115200 /dev/serial0 any 115200 flow
sudo hciattach -s 115200 /dev/serial0 any 115200 noflow nosleep
也就是前者需要硬件控制
后面不需要硬件控制
前者需要4根线RXTX硬件TXRX
后者可以不要硬件的2根线 但是需要修改固件代码
如下
/*
* app_main.c
*
* Created on: 2020-02-01 23:25
* Author: Jack Chen <redchenjs@live.com>
*/
#include "esp_bt.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "driver/uart.h"
#include "soc/uhci_periph.h"
#include "driver/periph_ctrl.h"
#define TAG "uart_hci"
#define HCI_UART_PORT (1)
#define BUF_SIZE (1024*4)
#if HCI_UART_PORT == 0
#define HCI_UART_TXD (1)
#define HCI_UART_RXD (3)
#define HCI_UART_RTS (-1)
#define HCI_UART_CTS (-1)
#elif HCI_UART_PORT == 1
#define HCI_UART_TXD (5)
#define HCI_UART_RXD (18)
#define HCI_UART_RTS (-1)
#define HCI_UART_CTS (-1)
#endif
void reconfig_hci_uart()
{
/* Configure parameters of an UART driver,
* communication pins and install the driver */
uart_config_t uart_config = {
.baud_rate = 115200,//460800 该函式之前全部是115200
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_APB,
};
int intr_alloc_flags = 0;
ESP_ERROR_CHECK(uart_driver_delete(HCI_UART_PORT));
ESP_ERROR_CHECK(uart_driver_install(HCI_UART_PORT, BUF_SIZE, 0, 0, NULL, intr_alloc_flags));
ESP_ERROR_CHECK(uart_param_config(HCI_UART_PORT, &uart_config));
ESP_ERROR_CHECK(uart_set_pin(HCI_UART_PORT, HCI_UART_TXD, HCI_UART_RXD, HCI_UART_RTS, HCI_UART_CTS));
#if ((HCI_UART_RTS == -1) || (HCI_UART_CTS == -1))
ESP_ERROR_CHECK(uart_set_hw_flow_ctrl(HCI_UART_PORT, UART_HW_FLOWCTRL_DISABLE, UART_FIFO_LEN - 8));
#endif
}
int app_main(void)
{
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
periph_module_enable(PERIPH_UART1_MODULE);
periph_module_enable(PERIPH_UHCI0_MODULE);
//ESP_ERROR_CHECK(uart_set_pin(UART_NUM_1, 5, 18, -1, -1));
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
bt_cfg.hci_uart_baudrate = 115200;
ESP_LOGI(TAG, "before%d", bt_cfg.mode);
bt_cfg.mode = 1;
ESP_LOGI(TAG, "after%d", bt_cfg.mode);
ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT));
ESP_ERROR_CHECK(esp_bt_controller_init(&bt_cfg));
reconfig_hci_uart();
ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE));
ESP_LOGI(TAG, "DONE::%d bps, tx: 5, rx: 18, rts: 19, cts: 23", bt_cfg.hci_uart_baudrate);
return 0;
}
最后
以上就是专注舞蹈为你收集整理的树莓派外挂ESP32-放弃硬件的2根线的全部内容,希望文章能够帮你解决树莓派外挂ESP32-放弃硬件的2根线所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复