<!--
 * @Description: file content
 * @Author: CK.Zh
 * @Date: 2020-02-20 11:39:38
 * @LastEditors: CK.Zh
 * @LastEditTime: 2020-04-30 10:15:25
 -->
# NaviKit_stm32
 PM1导航套件中电源控制板源码，STM32F107VCT6，开发环境STM32CubeIDE
# 特性

## 1.电池管理统计功能（基于IIC协议的库仑计）
## 2.负载的启动顺序编辑和软件改变/查询负载状态
## 3.电源监控功能（多轨电源电压监控）

# 串口通信协议
* TODO

 `STM32作为CDC Device接入到USB2.0-HUB的Downsteam 7端口下`

 * 负载开关部分
|  位置  |  字节0  | 字节1  | 字节2  | 字节3  | 字节4  | 字节5  | 字节6  | 字节7  |
|  ----  |  ----  |  ----  |  ----  |  ----  |  ----  |  ----  | ----  |  ----  |
| 功能  | 帧头 | 读写 | 指令 | 
| 示例  | 0xA5 | 0x80 读 </br> 0x81 写 </br> 0x7f 返回 |

* 电池管理部分

# Note
 在使用usb的时候，
 `stm32f1xx_hal_pcd.c`文件内
 `void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)`函数内
 `HAL_PCD_SuspendCallback(hpcd); `代码段 务必屏蔽，否则导致枚举失败，提示获取设备描述符失败。

# 电源模式状态机

![](power_state_machine.jpg)


# DFU模式

> Device Firmware Update , 针对Jetson Nano的固件升级模式

 * 进入方法：
    1. 关机状态；
    2. 按下`重启`按钮；
    3. 按下`电源`按钮；
    4. 听到滴声后，松开两个按钮。
    5. 检查Host PC是否有一个名为Nvidia的设备



# BIOS升级模式

> 主板上基础功能控制器的固件升级

* 进入方法：
   1. 断开主板的主电源和备用电源，并将主板BIOS的USB typeC接口和Host PC连接；
   3. 按下`重启`按钮，插入主板的主电源，听到滴声后，松开`重启`按钮；
   4. 打开STM32CubeProgrammer，选择UART模式，点击Connect；
   5. 点击Open，选择新固件，点击Download