NRF52晶元的多方面詳細闡述

NRF52是Nordic Semi公司推出的一款低功耗藍牙SoC,專為藍牙5(BLE)、802.15.4、Thread和ANT協議設計,它採用了ARM Cortex-M4F處理器和2.4GHz專利無線電協議,結合了高度靈活性,可靠性和安全性。它能夠應用於智能家居、健身和健康、運動設備、工業自動化等廣泛領域。下面將從多個方面闡述NRF52為中心的內容。

一、低功耗特性

NRF52作為低功耗的晶元在市場上廣受歡迎。通常情況下,它在待機模式下的功耗僅有1微安。使用BLE時,它的功率比其他晶元低40%,同時還實現了更遠的無線距離。

下面是一個示例代碼部分:

// Set the advertising parameters
NRF_BLE_ADV_DEF(m_advertising);    
static uint8_t m_adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
static ble_gap_adv_properties_t m_adv_properties = {
    .type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED,
    .p_peer_addr = NULL,
    .fp = BLE_GAP_ADV_FP_ANY,
    .interval = APP_ADV_INTERVAL,
    .duration = 0,
    .primary_phy = BLE_GAP_PHY_AUTO,
    .secondary_phy = BLE_GAP_PHY_AUTO,
    .channel_mask = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //all channels
    .max_skip = 0
};
    
// Start advertising.
void advertising_start() {
    uint32_t err_code;
    if(m_adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET) {
        err_code = sd_ble_gap_adv_set_configure(&m_advertising, &m_adv_properties);
        
        APP_ERROR_CHECK(err_code);
        m_adv_handle = err_code;
    
    }
    
    err_code = sd_ble_gap_adv_start(m_adv_handle, BLE_CONN_CFG_TAG_DEFAULT);
    APP_ERROR_CHECK(err_code);
}

// Stop advertising.
void advertising_stop() {
    uint32_t err_code = sd_ble_gap_adv_stop(m_adv_handle);
    APP_ERROR_CHECK(err_code);
}

二、通用天線

NRF52晶元還配備了內置天線,這意味著您無需連接外部天線即可進行通訊。內置天線還可減小系統集成所需的空間,從而使產品設計更加簡單。

下面是一個示例代碼部分:

#define APP_BLE_CONN_CFG_TAG            1                                  /**< A tag identifying the SoftDevice BLE configuration. */

void nrf52_ble_init(void) {
    uint32_t err_code;

    err_code = nrf_ble_init(&m_ble_init, NULL);
    APP_ERROR_CHECK(err_code);

    ble_advertising_init_t init;
    memset(&init, 0, sizeof(init));
    
    init.advdata.name_type          = BLE_ADVDATA_FULL_NAME;
    init.advdata.include_appearance = false;
    init.advdata.flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;

    init.srdata.uuids_complete.uuid_cnt = 1;
    init.srdata.uuids_complete.p_uuids  = &m_adv_uuid;

    err_code = ble_advertising_init(&m_advertising, &init);    
    APP_ERROR_CHECK(err_code);

    ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}

三、安全性

NRF52提供了許多內置安全功能,例如AES加密,SHA(安全哈希演算法)和True Random Number Generator(TRNG)。AES加密可以在處理器上進行加密和解密,從而提高處理性能並加強加密。使用SHA可以提供數據的完整性和強大的身份驗證,而TRNG則可生成真正隨機的數字,可以用於密鑰生成和其他安全應用。

下面是一個示例代碼部分:

#define AES_BLOCK_SIZE 16

// Create a single instance of AES context
typedef struct {
    nrf_crypto_aes_context_t enc_ctx;
    nrf_crypto_aes_context_t dec_ctx;
} security_context_t;

security_context_t m_cxt;

// Initialize the encryption / decryption contexts
void security_init(uint8_t *p_key) {
    nrf_crypto_aes_init(&m_cxt.enc_ctx, &g_nrf_crypto_aes_ecb_128_info, p_key);
    nrf_crypto_aes_init(&m_cxt.dec_ctx, &g_nrf_crypto_aes_ecb_128_info, p_key);
}

// Perform encryption of a single block using AES ECB mode
void security_encrypt(uint8_t *p_in, uint8_t *p_out) {
    uint8_t ctext[AES_BLOCK_SIZE];
    nrf_crypto_aes_ecb_encrypt(&m_cxt.enc_ctx, p_in, ctext);
    memcpy(p_out, ctext, AES_BLOCK_SIZE);
}

// Perform decryption of a single block using AES ECB mode
void security_decrypt(uint8_t *p_in, uint8_t *p_out) {
    uint8_t ptext[AES_BLOCK_SIZE];
    nrf_crypto_aes_ecb_decrypt(&m_cxt.dec_ctx, p_in, ptext);
    memcpy(p_out, ptext, AES_BLOCK_SIZE);
}

四、靈活性

NRF52提供許多可編程的外設,這使得它非常靈活,可以針對不同的應用程序進行編程。例如,它允許使用SPI,I2C和USART介面實現許多不同的傳輸協議。它還支持多種類型的感測器,並具有低功耗特性,適用於物聯網設備。

下面是一個示例代碼部分:

// Initialize the I2C interface
#define I2C_SCL_PIN           15
#define I2C_SDA_PIN           16
#define I2C_FREQUENCY         NRF_TWIM_FREQ_400K

nrf_drv_twi_config_t twi_config = {
  .scl                = I2C_SCL_PIN,
  .sda                = I2C_SDA_PIN,
  .frequency          = I2C_FREQUENCY,
  .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
  .clear_bus_init     = false
};

void i2c_initialize() {
  ret_code_t err_code;

  nrf_drv_twi_init(&m_twi, &twi_config, NULL, NULL);
  nrf_drv_twi_enable(&m_twi);
}

// Read data from a sensor using I2C
uint32_t i2c_read(uint8_t slave_address, uint8_t *p_data, uint32_t data_size) {
  uint32_t err_code;

  err_code = nrf_drv_twi_tx(&m_twi, slave_address, NULL, 0, true);
  APP_ERROR_CHECK(err_code);

  err_code = nrf_drv_twi_rx(&m_twi, slave_address, p_data, data_size);
  APP_ERROR_CHECK(err_code);

  return data_size;
}

// Write data to a sensor using I2C
uint32_t i2c_write(uint8_t slave_address, uint8_t *p_data, uint32_t data_size) {
  uint32_t err_code;

  err_code = nrf_drv_twi_tx(&m_twi, slave_address, p_data, data_size, false);
  APP_ERROR_CHECK(err_code);

  return data_size;
}

五、小結

綜上所述,NRF52作為一款低功耗藍牙SoC具有強大的靈活性和內置安全功能,提供多個可編程外設,使得它成為物聯網和其他低功耗應用程序的理想選擇。同時,它還配備了內置通用天線,使用起來更加方便。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/254270.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-14 17:41
下一篇 2024-12-14 17:41

相關推薦

  • Python取較大值的多方面

    Python是一款流行的編程語言,廣泛應用於數據分析、科學計算、Web開發等領域。作為一名全能開發工程師,了解Python的取較大值方法非常必要。本文將從多個方面對Python取較…

    編程 2025-04-27
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形資料庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網路。neo4j具有高效的讀和寫操作…

    編程 2025-04-25
  • c++ explicit的詳細闡述

    一、explicit的作用 在C++中,explicit關鍵字可以在構造函數聲明前加上,防止編譯器進行自動類型轉換,強制要求調用者必須強制類型轉換才能調用該函數,避免了將一個參數類…

    編程 2025-04-25
  • HTMLButton屬性及其詳細闡述

    一、button屬性介紹 button屬性是HTML5新增的屬性,表示指定文本框擁有可供點擊的按鈕。該屬性包括以下幾個取值: 按鈕文本 提交 重置 其中,type屬性表示按鈕類型,…

    編程 2025-04-25
  • crontab測試的詳細闡述

    一、crontab的概念 1、crontab是什麼:crontab是linux操作系統中實現定時任務的程序,它能夠定時執行與系統預設時間相符的指定任務。 2、crontab的使用場…

    編程 2025-04-25
  • Vim使用教程詳細指南

    一、Vim使用教程 Vim是一個高度可定製的文本編輯器,可以在Linux,Mac和Windows等不同的平台上運行。它具有快速移動,複製,粘貼,查找和替換等強大功能,尤其在面對大型…

    編程 2025-04-25

發表回復

登錄後才能評論