树莓派外挂ESP32-放弃硬件的2根线

研究关键指令 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值