Skip to content

使用FM25L16B和STM32 SPI通信的问题,原始代码是错的,应该修改如下 #3

@Home-Laozang

Description

@Home-Laozang

`/* 设置写使能所存器*/
void SetWriteEnableLatchForFM25xxx(FM25ObjectType *fram)
{
uint8_t opCode = FM25_WREN;

fram->ChipSelect(FM25CS_Enable);
fram->Write(&opCode, 1);
fram->ChipSelect(FM25CS_Disable);/*此处应该是DISABLE,好几处这里都需要修改 */

ReadStatusForFM25xxx(fram);

}

/向FM25xxx写入数据/
void WriteBytesToFM25xxx(FM25ObjectType *fram, uint32_t regAddress, uint8_t *wData, uint16_t wSize)
{
uint8_t data[128];
uint8_t temp;
uint16_t index = 0;

data[index++] = FM25_WRITE;

if (fram->memAddLength == FM258BitMemAdd)
{
    data[index++] = (uint8_t)regAddress;

    if ((fram->mode == FM25L04B) || (fram->mode == FM25040B))
    {
        temp = (uint8_t)(regAddress >> 8);
        data[0] |= ((temp & 0x01) << 3);
    }
}
else if (fram->memAddLength == FM2516BitMemAdd)
{
    data[index++] = (uint8_t)(regAddress >> 8);
    data[index++] = (uint8_t)regAddress;
}
else
{
    data[index++] = (uint8_t)(regAddress >> 16);
    data[index++] = (uint8_t)(regAddress >> 8);
    data[index++] = (uint8_t)regAddress;
}

for (int i = 0; i < wSize; i++)
{
    data[index++] = wData[i];
}

if (((fram->status) & 0x0C) != 0x00)
{
    WriteStatusForFM25xx(fram, fram->status & (~FM25_BPALL)); /* 这里应该是去掉写保护,原始代码没有去掉*/
}

if (((fram->status) & 0x02) != 0x02)
{
    SetWriteEnableLatchForFM25xxx(fram);/*去掉写保护后应该再写使能,才能正常写入数据*/
}

fram->ChipSelect(FM25CS_Enable);
fram->Write(data, index);
fram->ChipSelect(FM25CS_Disable);

WriteStatusForFM25xx(fram, fram->status | FM25_BPALL);

}`

查看注释部分

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions