Faits: Faits: A. A._, ressortissant croate et chilien né en 1950, se trouve en détention préventive à Genève depuis le 11 mars 2005. Il est inculpé de recel, pour avoir entreposé dans son appartement une multitude d'objets volés; dès octobre 2002, il aurait expédié environ 300 colis, soit au total environ 6 tonnes de marchandise volée ou de provenance douteuse, à destination des pays de l'Est. Il lui est aussi reproché d'avoir fait entrer en Suisse une quinzaine de personnes, et d'avoir fait sortir de Suisse une centaine de requérants d'asile, pour un profit d'environ 12'000 fr. Il est encore inculpé de blanchissage d'argent, pour avoir reçu sur ses comptes et transféré à l'étranger environ 140'000 fr. de provenance douteuse. La détention préventive a été prolongée une première fois par ordonnance du 18 mars 2005 de la Chambre d'accusation genevoise, compte tenu des motifs invoqués par le juge d'instruction - risques de collusion et de réitération -, à l'exception du risque de fuite, non retenu "en l'état". Une première demande de mise en liberté a été rejetée le 15 avril 2005 par la Chambre d'accusation. La détention préventive a été simultanément prolongée jusqu'au 15 juillet 2005. Les charges s'étaient aggravées sur le vu du rapport de police du 13 avril 2005. Le risque de collusion a été retenu, ainsi que le risque de fuite, vu la nationalité étrangère du prévenu et ses liens avec des ressortissants étrangers. Par ordonnance du 15 juillet 2005, la Chambre d'accusation a rejeté une nouvelle demande de libération, et prolongé la détention pour deux mois, afin de permettre au juge d'instruction de terminer son enquête et de communiquer le dossier au Parquet. Il était fait référence, s'agissant des risques de fuite et de collusion, à la précédente décision. La demande de libération sous caution était jugée "prématurée". Par ordonnance du 15 juillet 2005, la Chambre d'accusation a rejeté une nouvelle demande de libération, et prolongé la détention pour deux mois, afin de permettre au juge d'instruction de terminer son enquête et de communiquer le dossier au Parquet. Il était fait référence, s'agissant des risques de fuite et de collusion, à la précédente décision. La demande de libération sous caution était jugée "prématurée". B. A._ forme un recours de droit public par lequel il conclut à l'annulation de cette dernière ordonnance et à sa mise en liberté immédiate. Subsidiairement, il demande le renvoi de la cause à la Chambre d'accusation pour nouvelle décision. Il requiert l'assistance judiciaire. La Chambre d'accusation se réfère à son ordonnance. Le Ministère public conclut au rejet du recours. Le recourant a eu l'occasion de répliquer.