Microchip
直播中

李麒

7年用户 289经验值
私信 关注
[问答]

SPI闪存驱动程序的命令被分配在队列中该怎么办?

我还没有遇到任何问题,但它可能是一个奇怪的问题来源。看看以下的sst25vf064c驱动段一看:案例drv_sst25vf064c_send_write_cmd_address_and_data:{ /*使CS线* / sys_ports_pinclear(ports_id_0,hdriver - >;chipselectportchannel,hdriver - >;chipselectbitposition);/*加写字节码* / hdriver - >;commandaddres数据[ 0 ] = sst25vf064c_write_byte_op_code;/*加写地址和数据指针/ hdriver - >;commandaddressdata [ 1 ] =(uint8_t)(bufferobj - & gt;地址>;>;16);hdriver - >;commandaddressdata [ 2 ] =(uint8_t)(bufferobj - & gt;地址>;>;8);hdriver - >;commandaddressdata [ 3 ] =(uint8_t)(缓冲区obj - & gt;地址);如果(bufferobj - >;操作= = drv_sst25vf064c_page_write){ memcpy(&;hdriver - >;commandaddressdata [ 4 ],bufferobj - >;缓冲液,256);bufferobj - >;缓冲= bufferobj - >;缓冲区+ 256;/*添加缓冲在SPI队列* / hdriver - >;spibufferhandle =(drv_spi_bufferaddwrite(hdriver—>;spidriveropenhandle,(uint8_t *)&;hdriver - >;commandaddressdata [ 0 ],260,零,零));}否则{ hdriver - >;commandaddressdata [ 4 ] =(uint8_t)(*(bufferobj - >;缓冲+ +));/*加缓冲区在SPI队列* / hdriver - >;spibufferhandle =(drv_spi_bufferaddwrite(hdriver - >;spidriveropenhandle,(UTI8AYT**)和HFRAMER & GT;CubjdAdjsReDATA(0),5,NULL,NULL);= drv_spi_buffer_handle_invalid){ /*这意味着命令被分配在SPI的队列,现在等待它在未来的状态* / hdriver执行>;bufferprocessstate = drv_sst25vf064c_wait_for_write_or_erase_buffer_complete;} break;}看出问题了吗?如果无法将消息添加到队列中会发生什么?显然,我们打破了开关,回到同一个案例,再次尝试。不幸的是我们的缓冲区指针递增256或1,无论是否添加项目到队列中是成功的。当然,队列不会全为我们处理在一个时间的一个消息。但是,如果我们在同一个SPI总线上使用这些闪存芯片和其他几个芯片会怎么样呢?它可能无法排队吗?我认为这是完全可能的。我认为作为一个保障芯片应该考虑增加缓冲区指针的消息后已成功添加到队列。

回帖(1)

石栓柱

2019-8-1 13:53:34
嗨,祝福,你是绝对正确的。我已经抓住了这个问题。谢谢你的报道。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分