请教:
我们在使用C6657的NDK开发包作网络传输时发现,在使用send函数发出一段数据后,被发送的内存中出现了CACHE的现象,且cache不一致还导致了错误。
按照我们之前的理解,以太网应该和SRIO类似,当发送时,内存中的数据直接被网口提取出来封包发送,可如果出现了CACHE问题,是不是说网口实际上是通过CPU从内存中取数的呢?如果这样,是不是收数时也是同样通过CPU来把数字写到内存中?
之前我们听说C6678的网络与多核导航有关,那么C6678的情况是否有所不同?
谢谢!
Andy Yin1:
C6657内部有DMA负责数据的收发。不管对哪一种外设,如果涉及到core对memory的读写,都需要维护cache一致性。例如在发送数据时,首先core将数据写到发送buffer,如果这块buffer是cacheable,则需要writeback,然后再启动发送,这对EMAC及SRIO都是如此。
C6678的EMAC是有navigator维护数据的输入输出,C6657的EMAC内部有独立的DMA与Navigator无关。