Faits: A. Le 9 novembre 2009, B._, membre de la gendarmerie vaudoise, a déposé plainte pénale contre A._. La veille, la police avait été appelée à intervenir à l'encontre de l'intéressé, qui paraissait perturbé; il avait été conduit chez un médecin qui avait décidé de le placer à l'Hôpital psychiatrique de Prangins. Arrivé à l'hôpital, B._ avait attendu dans le véhicule avec l'intéressé, menotté dans le dos. Celui-ci l'avait insulté, lui avait craché au visage et lui avait asséné un coup de tête dans les dents. Une enquête a été ouverte par le Juge d'instruction de l'arrondissement de La Côte, qui a notamment entendu A._ le 21 avril 2010. B. Le 28 juillet 2010, A._ a déposé plainte pénale pour abus d'autorité, affirmant que le policier l'avait frappé au visage alors qu'il se trouvait menotté dans la voiture. Par ordonnance du 7 mars 2012 - après l'admission d'un recours pour déni de justice -, le Ministère public a classé la plainte de A._. Celui-ci avait eu connaissance du nom de l'agent impliqué lors de son audition du 21 avril 2010; la plainte était dès lors tardive. Le prévenu s'était borné à se défendre, alors que le plaignant était agité et avait dû être maîtrisé de force. Par arrêt du 11 avril 2012, la Chambre des recours pénale du Tribunal cantonal vaudois a confirmé cette ordonnance. Le prévenu n'avait pas abusé de son pouvoir en se défendant face à l'agression du plaignant. Les lésions corporelles simples ou les voies de fait ne se poursuivaient que sur plainte; en l'occurrence, A._ avait été entendu comme prévenu à raison des mêmes évènements, le 21 avril 2010, et avait pu identifier l'agent impliqué; la plainte était dès lors tardive. C. A._ forme un recours en matière pénale avec une demande d'assistance judiciaire. Il conclut à l'annulation de l'arrêt cantonal et au renvoi de la cause à la cour cantonale ou au Ministère public afin qu'il engage l'accusation pour abus d'autorité, lésions corporelles simples ou voies de fait. La Chambre des recours pénale se réfère à son arrêt. Le Ministère public conclut au rejet du recours. Le recourant a renoncé à de nouvelles observations.