主板bios芯片更换大容量

主板bios芯片更换大容量,第1张

AMD锐龙处理器除了性能、价格方面的突出表现,坚持AM4接口不变、新老平台持续保持兼容也为人所津津乐道,至少到2020年AMD都不会换接口,看起来只有到了DDR5内存时代才会不得不换。

但是想做到这一点,其实非常不容易,尤其是让老主板支持新处理器,复杂性远超一般人想象。

比如两年前设计300系列主板的时候,厂商几乎不可能想到锐龙会在两年时间内发生这么大的规格变化,核心数量、功耗、内存频率等等,这都对主板在供电、散热、走线等方面设计的扎实性、前瞻性都是极大的挑战。Intel八代酷睿拒绝200系列主板的理由不就是供电规范跟不上。

而最头疼的还是BIOS SPI EEPROM芯片的容量限制,因为前几年主板BIOS芯片的容量基本都还是16MB,而随着支持处理器的越来越多、功能特性的越来越丰富复杂,这点容量已经捉襟见肘了,面对AMD给出的最新微代码Agesa ComboAM4 1.0.0.3a甚至已经塞不下了,不得不做出一些牺牲。

微星在介绍其X470、B450、X370、B350、A320(没错还有它)老主板支持三代锐龙的最新Beta测试版BIOS的时候,就透露了三点:

首先,新BIOS放弃了对28nm工艺的Bristol Ridge APU/速龙处理器的支持,它们是第一代AM4接口产品,用的还是推土机CPU、GCN GPU老架构。

一、硬件电路接口图片

1.ADXL345硬件接口图片使用的是SPI端口进行通信,这样读取数据比较快且后续也可以转化为IIC通信接口。

在网上找一些发现IIC接口的比较多,所以本人就DIY做SPI的通信。

2.STM32F103T系列单片机作为MCU 资源比较丰富、本人比较熟悉开发速度较快

硬件电路首先是为了实现功能,所以设计比较简单。后续小编想做无线蓝牙的数据传输,所以硬件上也留了蓝牙串口通信的硬件接口和3.3V电源管理。

暂且将硬件这样设计,设计为双层PCB 这样减少了空间。电容、电阻为0805的易焊接。器件都选为贴片。

二、单片机驱动代码

1.ADXL345的端口配置函数

#define ADXL345_FLAG_TIMEOUT ((uint32_t)0x1000)

#define ADXL345_SPI SPI1

#define ADXL345_SPI_CLK RCC_APB2Periph_SPI1

#define ADXL345_SPI_SCK_PIN GPIO_Pin_5

#define ADXL345_SPI_SCK_GPIO_PORT GPIOA

#define ADXL345_SPI_SCK_GPIO_CLK RCC_APB2Periph_GPIOA

#define ADXL345_SPI_SCK_SOURCEGPIO_PinSource5

#define ADXL345_SPI_SCK_AFGPIO_AF_5

#define ADXL345_SPI_MISO_PIN GPIO_Pin_6

#define ADXL345_SPI_MISO_GPIO_PORTGPIOA

#define ADXL345_SPI_MISO_GPIO_CLK RCC_APB2Periph_GPIOA

#define ADXL345_SPI_MISO_SOURCE GPIO_PinSource6

#define ADXL345_SPI_MISO_AF GPIO_AF_5

#define ADXL345_SPI_MOSI_PIN GPIO_Pin_7

#define ADXL345_SPI_MOSI_GPIO_PORTGPIOA

#define ADXL345_SPI_MOSI_GPIO_CLK RCC_APB2Periph_GPIOA

#define ADXL345_SPI_MOSI_SOURCE GPIO_PinSource7

#define ADXL345_SPI_MOSI_AF GPIO_AF_5

#define ADXL345_SPI_CS_PINGPIO_Pin_2

#define ADXL345_SPI_CS_GPIO_PORT GPIOB

#define ADXL345_SPI_CS_GPIO_CLK RCC_APB2Periph_GPIOB

#define ADXL345_SPI_INT1_PIN GPIO_Pin_0

#define ADXL345_SPI_INT1_GPIO_PORTGPIOB

#define ADXL345_SPI_INT1_GPIO_CLK RCC_APB2Periph_GPIOB

#define ADXL345_SPI_INT1_EXTI_LINEEXTI_Line0

#define ADXL345_SPI_INT1_EXTI_PORT_SOURCE EXTI_PortSourceGPIOB

#define ADXL345_SPI_INT1_EXTI_PIN_SOURCE EXTI_PinSource0

#define ADXL345_SPI_INT1_EXTI_IRQnEXTI0_IRQn

#define ADXL345_SPI_INT2_PIN GPIO_Pin_1

#define ADXL345_SPI_INT2_GPIO_PORTGPIOB

#define ADXL345_SPI_INT2_GPIO_CLK RCC_APB2Periph_GPIOB

#define ADXL345_SPI_INT2_EXTI_LINEEXTI_Line1

#define ADXL345_SPI_INT2_EXTI_PORT_SOURCE EXTI_PortSourceGPIOB

#define ADXL345_SPI_INT2_EXTI_PIN_SOURCE EXTI_PinSource1

#define ADXL345_SPI_INT2_EXTI_IRQnEXTI1_IRQn

#define ADXL345_WHO_AM_I_ADDR 0x0F

#define ADXL345_CTRL_REG1_ADDR 0x20

#define ADXL345_CTRL_REG2_ADDR 0x21

#define ADXL345_CTRL_REG3_ADDR 0x22

#define ADXL345_CTRL_REG4_ADDR 0x23

#define ADXL345_CTRL_REG5_ADDR 0x24

#define ADXL345_REFERENCE_REG_ADDR 0x25

#define ADXL345_OUT_TEMP_ADDR 0x26

#define ADXL345_STATUS_REG_ADDR0x27

#define ADXL345_OUT_X_L_ADDR 0x28

#define ADXL345_OUT_X_H_ADDR 0x29

#define ADXL345_OUT_Y_L_ADDR 0x2A

#define ADXL345_OUT_Y_H_ADDR 0x2B

#define ADXL345_OUT_Z_L_ADDR 0x2C

#define ADXL345_OUT_Z_H_ADDR 0x2D

#define ADXL345_FIFO_CTRL_REG_ADDR 0x2E

#define ADXL345_FIFO_SRC_REG_ADDR 0x2F

#define ADXL345_INT1_CFG_ADDR 0x30

#define ADXL345_INT1_SRC_ADDR 0x31

#define ADXL345_INT1_TSH_XH_ADDR 0x32

#define ADXL345_INT1_TSH_XL_ADDR 0x33

#define ADXL345_INT1_TSH_YH_ADDR 0x34

#define ADXL345_INT1_TSH_YL_ADDR 0x35

#define ADXL345_INT1_TSH_ZH_ADDR 0x36

#define ADXL345_INT1_TSH_ZL_ADDR 0x37

#define ADXL345_INT1_DURATION_ADDR 0x38

#define I_AM_ADXL345 ((uint8_t)0xD4)

#define ADXL345_MODE_POWERDOWN ((uint8_t)0x00)

#define ADXL345_MODE_ACTIVE ((uint8_t)0x08)

#define ADXL345_OUTPUT_DATARATE_1((uint8_t)0x00)

#define ADXL345_OUTPUT_DATARATE_2((uint8_t)0x40)

#define ADXL345_OUTPUT_DATARATE_3((uint8_t)0x80)

#define ADXL345_OUTPUT_DATARATE_4((uint8_t)0xC0)

#define ADXL345_X_ENABLE((uint8_t)0x02)

#define ADXL345_Y_ENABLE((uint8_t)0x01)

#define ADXL345_Z_ENABLE((uint8_t)0x04)

#define ADXL345_AXES_ENABLE ((uint8_t)0x07)

#define ADXL345_AXES_DISABLE((uint8_t)0x00)

#define ADXL345_BANDWIDTH_1 ((uint8_t)0x00)

#define ADXL345_BANDWIDTH_2 ((uint8_t)0x10)

#define ADXL345_BANDWIDTH_3 ((uint8_t)0x20)

#define ADXL345_BANDWIDTH_4 ((uint8_t)0x30)

#define ADXL345_FULLSCALE_250 ((uint8_t)0x00)

#define ADXL345_FULLSCALE_500 ((uint8_t)0x10)

#define ADXL345_FULLSCALE_2000 ((uint8_t)0x20)

#define ADXL345_BlockDataUpdate_Continous ((uint8_t)0x00)

#define ADXL345_BlockDataUpdate_Single ((uint8_t)0x80)

#define ADXL345_BLE_LSB ((uint8_t)0x00)

#define ADXL345_BLE_MSB((uint8_t)0x40)

#define ADXL345_HIGHPASSFILTER_DISABLE ((uint8_t)0x00)

#define ADXL345_HIGHPASSFILTER_ENABLE ((uint8_t)0x10)

#define ADXL345_INT1INTERRUPT_DISABLE ((uint8_t)0x00)

#define ADXL345_INT1INTERRUPT_ENABLE((uint8_t)0x80)

#define ADXL345_INT2INTERRUPT_DISABLE ((uint8_t)0x00)

#define ADXL345_INT2INTERRUPT_ENABLE((uint8_t)0x08)

#define ADXL345_INT1INTERRUPT_LOW_EDGE ((uint8_t)0x20)

#define ADXL345_INT1INTERRUPT_HIGH_EDGE ((uint8_t)0x00)

#define ADXL345_BOOT_NORMALMODE ((uint8_t)0x00)

#define ADXL345_BOOT_REBOOTMEMORY ((uint8_t)0x80)

#define ADXL345_HPM_NORMAL_MODE_RES ((uint8_t)0x00)

#define ADXL345_HPM_REF_SIGNAL ((uint8_t)0x10)

#define ADXL345_HPM_NORMAL_MODE ((uint8_t)0x20)

#define ADXL345_HPM_AUTORESET_INT ((uint8_t)0x30)

#define ADXL345_HPFCF_0 0x00

#define ADXL345_HPFCF_1 0x01

#define ADXL345_HPFCF_2 0x02

#define ADXL345_HPFCF_3 0x03

#define ADXL345_HPFCF_4 0x04

#define ADXL345_HPFCF_5 0x05

#define ADXL345_HPFCF_6 0x06

#define ADXL345_HPFCF_7 0x07

#define ADXL345_HPFCF_8 0x08

#define ADXL345_HPFCF_9 0x09

#define ADXL345_CS_LOW() GPIO_ResetBits(ADXL345_SPI_CS_GPIO_PORT, ADXL345_SPI_CS_PIN)

#define ADXL345_CS_HIGH() GPIO_SetBits(ADXL345_SPI_CS_GPIO_PORT, ADXL345_SPI_CS_PIN)

void ADXL345_Init(ADXL345_InitTypeDef *ADXL345_InitStruct)

void ADXL345_RebootCmd(void)

void ADXL345_INT1InterruptCmd(uint8_t InterruptState)

void ADXL345_INT2InterruptCmd(uint8_t InterruptState)

void ADXL345_INT1InterruptConfig(ADXL345_InterruptConfigTypeDef *ADXL345_IntConfigStruct)

uint8_t ADXL345_GetDataStatus(void)

void ADXL345_FilterConfig(ADXL345_FilterConfigTypeDef *ADXL345_FilterStruct)

void ADXL345_FilterCmd(uint8_t HighPassFilterState)

void ADXL345_Write(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite)

void ADXL345_Read(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead)

2.ADXL345的SPI配置函数

void SPI_init(void)

{

GPIO_InitTypeDef GPIO_InitStructure

SPI_InitTypeDefSPI_InitStructure

R


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/bake/8011810.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存